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
#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;
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");
}
{
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;
}
}