1.通过各边数据出现的次数(根据边长种类应为12,8或4),以初步实现不同面边长的对应,再通过比较同面长宽是否相等来真正实现不同面边长的对应。
2.注意面的长宽两两对应
3.用Udebug19年的校准(反正我是前几个debug都过结果WA了)
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main ()
{
int a;
int aa[10010];
int aaa[12];
int ii=0;
memset(aa,0,sizeof(aa));
int flag=0;
int flag1=0;
while(scanf("%d",&a)!=EOF)
{
if(!aa[a])
{
flag1++;
}
aaa[ii++]=a;
aa[a]++;
flag++;
if(flag==12)
{
int flag3=0;
for(int i=0; i<11; i+=2)
{
for(int j=0; j<11; j+=2)
if((aaa[i]==aaa[j]&&aaa[i+1]==aaa[j+1])||(aaa[i]==aaa[j+1]&&aaa[i+1]==aaa[j]))
{
flag3++;
}
}
if(flag3==12||flag3==20||flag3==36)
printf("");
else
{
printf("IMPOSSIBLE\n");
ii=0;
memset(aaa,0,sizeof(aaa));
memset(aa,0,sizeof(aa));
flag=0;
flag1=0;
continue;
}
int flag2=0;
if(flag1==1)
{
printf("POSSIBLE\n");
}
else if(flag1==2)
{ int flag4=0;
for(int i=0;i<11;i+=2)
if(aaa[i]==aaa[i+1])
flag4++;
if(flag4==2)
printf("");
else
{
printf("IMPOSSIBLE\n");
ii=0;
memset(aaa,0,sizeof(aaa));
memset(aa,0,sizeof(aa));
flag=0;
flag1=0;
continue;
}
flag2=0;
for(int i=0; i<10010; i++)
{
if(aa[i])
{
if(aa[i]==4||aa[i]==8)
flag2++;
}
}
if(flag2==2)
printf("POSSIBLE\n");
else
printf("IMPOSSIBLE\n");
}
else if(flag1==3)
{
int flag4=0;
for(int i=0;i<11;i+=2)
if(aaa[i]==aaa[i+1])
flag4++;
if(flag4==0)
printf("");
else
{
printf("IMPOSSIBLE\n");
ii=0;
memset(aaa,0,sizeof(aaa));
memset(aa,0,sizeof(aa));
flag=0;
flag1=0;
continue;
}
flag2=0;
for(int i=0; i<10010; i++)
{
if(aa[i])
{
if(aa[i]==4)
flag2++;
}
}
if(flag2==3)
printf("POSSIBLE\n");
else
printf("IMPOSSIBLE\n");
}
else
printf("IMPOSSIBLE\n");
ii=0;
memset(aaa,0,sizeof(aaa));
memset(aa,0,sizeof(aa));
flag=0;
flag1=0;
}
}
return 0;
}