UVA-1587 box
题目大意:判断6个面能不能组成一个长方体
解题思路:先给6个面从小到大排个序,然后比较6个面中是不是有3对。二是边的问题,只能有1,2,3 种边,而且是4的倍数,所以12个量要统计和比较。
两个变量同时比较:p[j][0] == p[j + 1][0] ? p[j][1] > p[j + 1][1]:p[j][0] > p[j + 1][0]
#include<iostream>
#include<cstdio>
int main() {
int p[6][2];
int temp;
while (scanf("%d%d", &p[0][0], &p[0][1])!=EOF)
{
int an[10010]={0};
if (p[0][0]>p[0][1])
{
temp = p[0][0];
p[0][0] = p[0][1];
p[0][1] = temp;
}
for (int i = 1; i<6; i++)
{
scanf("%d%d", &p[i][0], &p[i][1]);
if (p[i][0]>p[i][1])
{
temp = p[i][0];
p[i][0] = p[i][1];
p[i][1] = temp;
}
}
bool flag = true;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6 - i - 1; j++)
if (p[j][0] == p[j + 1][0] ? p[j][1] > p[j + 1][1]:p[j][0] > p[j + 1][0])
{
temp = p[j][0];
p[j][0] = p[j + 1][0];
p[j + 1][0] = temp;
temp = p[j][1];
p[j][1] = p[j + 1][1];
p[j + 1][1] = temp;
}
}
for (int i = 0; i<6; i += 2)
{
if (p[i][0] == p[i + 1][0] && p[i][1] == p[i + 1][1])
{
}
else flag = false;
}
for(int i=0;i<6;i++)
for(int j=0;j<2;j++)
an[p[i][j]]++;
for(int i=0;i<6;i++)
for(int j=0;j<2;j++)
if(an[p[i][j]]%4!=0)flag=false;
if (flag)printf("POSSIBLE\n");
else printf("IMPOSSIBLE\n");
}
return 0;
}