uva 1587(Box UVA - 1587)
生活随笔
收集整理的這篇文章主要介紹了
uva 1587(Box UVA - 1587)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目大意是給定6個數對,每個數對代表一個面的長和寬,判斷這6個面是否能構成一個長方體。
這種題一看很復雜,但是只要不想多了實際上這就是一個水題。。。
首先說明一下判斷的思路:
1.長方體是有三個對面的,所以先把這三個對面找出來(因為輸入的長和寬是不確定的,所以先把每一組輸入的兩個數按照從大到小進行調整(這里建議開一個結構體數組))。調整完之后,自己寫一個cmp的函數用來sort,cmp是先比較長(按照升序或者降序是無所謂的,隨你)然后如果長相等那么就比較寬(按照和長一樣的順序比較)。
2.你以為這樣就完了,那么你就錯了,不信你試試馬上一個WA,我就是這樣,其實還漏了一個條件。比如這組測試數據:
3 3
3 3
3 2
3 2
2 2
2 2
按照第一個條件進行輸出會輸出POSSIBLE實際上它是IMPOSSIBLE.為什么?因為長方體的不一樣長的邊數一定是4的倍數,不是的話一定不行,像這一組數據,6個3 6個2一看就不對,所以我們要加上第二個條件,對每一組的輸入的長和寬進行計數(這里我是開了一個bk數組,因為是1e4的數據大小所以完全可以開的出來,然后開一個計數數組記錄不同的長和寬,然后直接從計數的數組進行循環比較每一個bk[jishu[i]]%4就行了)
2018/10/28 居然有人看我的題解并且hack了,是的我原來的程序對于這組樣例
1 1
1 1
2 2
2 2
3 3
3 3
是不對的,hack成功!!!
至于更改我直接加了一個recheck函數進行recheck一下如果兩個對面是正方形且邊長又不相等,那么肯定是impossible,之前的uva的數據里面沒有這組數據所以我也沒有注意這個情況
我的代碼:
?
1 #include <bits/stdc++.h> 2 //#include "fp.h" 3 using namespace std; 4 int bk[10010]; 5 int c[20]; 6 struct node 7 { 8 int x,y; 9 }a[10]; 10 bool cmp(node aa,node b) 11 { 12 return aa.x==b.x?aa.y>b.y:aa.x>b.x; 13 } 14 bool check(int aa) 15 { 16 if(a[aa].x==a[aa+1].x&&a[aa].y==a[aa+1].y) 17 return true; 18 else 19 return false; 20 } 21 bool recheck(int aa) 22 { 23 if(a[aa].x==a[aa+1].y&&a[aa+2].x==a[aa+3].y&&a[aa].x!=a[aa+2].x) 24 return false; 25 else 26 return true; 27 } 28 main() 29 { 30 //fop(); 31 while(cin>>a[0].x>>a[0].y>>a[1].x>>a[1].y>>a[2].x>>a[2].y>>a[3].x>>a[3].y>>a[4].x>>a[4].y>>a[5].x>>a[5].y) 32 { 33 memset(bk,0,sizeof(bk)); 34 int k=0; 35 for(int i=0;i<6;i++) 36 { 37 bk[a[i].x]++; 38 bk[a[i].y]++; 39 if(bk[a[i].x]==1) 40 c[k++]=a[i].x; 41 if(bk[a[i].y]==1) 42 c[k++]=a[i].y; 43 } 44 int ff=1; 45 for(int i=0;i<k;i++) 46 if(bk[c[i]]%4!=0) 47 { 48 ff=0;break; 49 } 50 for(int i=0;i<6;i++) 51 if(a[i].x<a[i].y) 52 { 53 int t; 54 t=a[i].x; 55 a[i].x=a[i].y; 56 a[i].y=t; 57 } 58 sort(a,a+6,cmp); 59 int f=1; 60 for(int i=0;i<5;i+=2) 61 if(!check(i)) 62 { 63 f=0; 64 break; 65 } 66 int fff=recheck(0)?1:0; 67 printf("%s\n",(f&&ff&&fff)?"POSSIBLE":"IMPOSSIBLE"); 68 } 69 }?
?
?
?
轉載于:https://www.cnblogs.com/baccano-acmer/p/9741159.html
總結
以上是生活随笔為你收集整理的uva 1587(Box UVA - 1587)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx重启
- 下一篇: [国家集训队]部落战争