国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

算典03_習題_10_UVA-1587

2019-11-08 03:02:04
字體:
來源:轉載
供稿:網友

Box

題意

輸入六個矩形的長和寬,判斷是否可以組成長方體

題解

如果六個矩形的長和寬呈如下格式,便可組成:

a b a b b c b c a c a c

(a, b, c 分別代表三種數,且互相可以相等) 下面一步一步來處理 首先在輸入時給長寬排序,即對每一個矩形數據有: 左 < 右 然后我使用一個二維數組vis[maxn][maxn]來維護一種矩形的出現次數(vis[a][b]即為矩形(a,b)出現的次數),每當一種矩形出現滿兩次時,就計數一次,這樣最后計數如果不等于3的話就說明不可能組成長方體 但是就算是計數等于3了,也不一定可以組成,比如說:

1 2 1 2 1 2 1 2 1 2 1 2

或者

1 1 1 1 1 1 1 1 1 2 1 2

等這樣的數據就不行,那么還要滿足什么條件呢 我發現,如果我統計a b c 的出現次數的話,理論上來說 a b c 都應該是4的整數倍才行,然而上面兩個樣例好像并不滿足這個條件 而且我也認為如果在計數等于3的前提下滿足了這個條件,那么它一定就可以組成矩形了,所以這里就統計一下abc的出現次數即可

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 1e4 +5;#define met(a,b) memset(a, b, sizeof(a));int a[6][2];int vis[maxn][maxn];int b[maxn];int main(){ #ifdef _LOCAL freopen("in.txt","r", stdin); #endif // _LOCAL while(scanf("%d%d", &a[0][0], &a[0][1]) == 2){ if(a[0][0] > a[0][1]) swap(a[0][0], a[0][1]); for(int i = 1; i < 6; ++i){ scanf("%d%d", &a[i][0], &a[i][1]); if(a[i][0] > a[i][1]) swap(a[i][0], a[i][1]); } //計數 met(vis, 0);met(b, 0); int cnt = 0; for(int i = 0; i < 6; ++i){ if(!vis[a[i][0]][a[i][1]] || vis[a[i][0]][a[i][1]] >= 2) { vis[a[i][0]][a[i][1]] = 0; ++cnt; } ++vis[a[i][0]][a[i][1]]; ++b[a[i][0]]; ++ b[a[i][1]]; } if(cnt != 3) {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黑河市| 土默特右旗| 台江县| 阿荣旗| 凭祥市| 冕宁县| 南靖县| 太白县| 龙岩市| 武平县| 鄂托克旗| 山东省| 南木林县| 丰镇市| 班戈县| 仁化县| 桓台县| 凤庆县| 合作市| 嘉定区| 湘乡市| 碌曲县| 大名县| 赤壁市| 黔西| 曲麻莱县| 长沙县| 增城市| 双流县| 平舆县| 台州市| 陕西省| 浪卡子县| 桃源县| 天长市| 保德县| 吉林省| 盐亭县| 卫辉市| 盐亭县| 万载县|