http://acm.hust.edu.cn/vjudge/problem/51982
水题,错了了三次。一次是因为while(1) 无法结束程序而出现的TLE,而后两次WA是忽略了长方体是只有长宽高三条棱!
仅仅只判别相对的两个面是否相同是不够的。
解题思路就是组成6个pair然后排序,最后判别是否长方体的长宽高都符合条件即可。
Solution:
#include <algorithm> #include <iostream> #include <utility> #include <cstring> #include <cstdlib> #include <cstdio> #include <deque> #include <string> #include <vector> #include <cmath> #include <stack> #include <queue> #include <map> #include <set> using namespace std; #define mm(a,i) memset(a, i, sizeof(a)); #define LL long long #define Mod 1000000007 #define SC_C(s) scanf("%c", &s) #define SC(a) scanf("%d", &a) #define SCC(a,b) scanf("%d %d", &a, &b) #define SCCC(a,b,c) scanf("%d %d %d", &a, &b, &c) #define FXA(i,a,n) for(i=a; i<n; i++) #define FDA(i,a,n) for(i=a; i>n; i++) #define FXDA(i,a,n) for(i=a; i<=n; i++) #define FDDA(i,a,n) for(i=a; i>=n; i++) #define FXB(i,a,n) for(i=a; i<n; i--) #define FDB(i,a,n) for(i=a; i>n; i--) #define FXDB(i,a,n) for(i=a; i<=n; i--) #define FDDB(i,a,n) for(i=a; i>=n; i--) #define PF(n) printf("%d\n", n); #define PFF(n,m) printf("%d %d\n", n, m); #define PFFF(x,y,z) printf("%d %d %d\n", x, y, z); #define PF_Case(i) printf("Case %d:\n",i); #define PF_C(i) printf("%c:\n",i); #define PF_L(x) printf("%I64d\n",x); #define IN freopen("D:\\in.txt","r",stdin); #define ENT printf("\n"); #define MAX(a,b) a>b?a:b #define MIN(a,b) a<b?a:b int maxx = 999999999; int minn = -999999999; bool flag; int i,j,k,T,ans,sum,m,n,cnt; typedef pair<int, int> point; point p[6]; bool ok() { if(p[0].first != p[1].first || p[0].second != p[1].second) return false; if(p[2].first != p[3].first || p[2].second != p[3].second) return false; if(p[4].first != p[5].first || p[4].second != p[5].second) return false; if(p[1].first != p[2].first) return false; if(p[1].second != p[4].first) return false; if(p[3].second != p[4].second) return false; return true; } int main() { #ifndef ONLINE_JUDGE IN #endif // ONLINE_JUDGE int a,b; while(~SCC(a,b)) { // mm(p,0); if(a<b) p[0].first=a,p[0].second=b; else p[0].first=b,p[0].second=a; flag = true; FXA(i,1,6) { SCC(a,b); if(a<b) p[i].first=a,p[i].second=b; else p[i].first=b,p[i].second=a; } sort(p, p+6); // for(i=0; i<6; i++) { // cout<<p[i].first<<" "<<p[i].second<<endl; // } // if(ok()) puts("POSSIBLE"); else puts("IMPOSSIBLE"); } return 0; }