UVa 1587 - Box

做了很久了,终于AC了!!!    刚开始思路出现了问题,只判断了是否有三对相等的面,一直没找到bug,后来在网上搜了12几组测试用例,发现有一组测试用例输出结果不对,这才发现了程序还有bug,没用很久就有了新思路,我的思路是在保证有三对面相等的基础上,再对长方体的三个面的边长进行限制,分8种情况, 自己知道很麻烦,但还是写出来了,当提交AC之后,太激动了!         水平还是太水, 慢慢练吧!

#include<stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
         int  i,j,k,r,s,t,m,n,z,x,c;
         int a[10][10]={0},b[10][10]={0},d[10]={0};
         while(scanf("%d %d",&a[1][1],&a[1][2]) != EOF)
         {
                 r=0; s=2000;
                for(i=2; i<=6; i++)
                      for(j=1; j<=2; j++)
                            scanf("%d",&a[i][j]);
                for(i=1; i<=6; i++)
                       for(j=1; j<=2; j++)
                             b[i][j]=a[i][j];
                for(i=1; i<=6; i++)
                {
                       for(j=i+1; j<=6; j++)
                       {
                               if(  (a[i][1] == a[j][1]  && a[i][2] == a[j][2] )   ||  (  a[i][1] == a[j][2]  && a[i][2] == a[j][1]  )     )
                                  {
                                        a[i][1]=a[j][1]=a[i][2]=a[j][2]=s;         s++;
                                        d[++r]=i;
                                        break;
                                  }
                       }
                }
                z=d[1];    x=d[2];    c=d[3];

                 if     ( b[z][1]==b[c][2] && b[z][2] == b[x][1] && b[x][2]== b[c][1] && r==3   )
                        printf("POSSIBLE\n");
                 else if (  b[z][1] == b [c][1] && b[z][2] == b[x][1] && b[x][2] == b[c][2] && r==3  )
                        printf("POSSIBLE\n");
                 else if (  b[z][1] == b [c][2] && b[z][2] == b[x][2] && b[x][1] == b[c][1]&&r==3  )
                        printf("POSSIBLE\n");
                 else if (  b[z][1] == b [c][1] && b[z][2] == b[x][2] && b[x][1] == b[c][2] &&r==3  )
                        printf("POSSIBLE\n");
                 else if (  b[z][1] == b [x][1] && b[z][2] == b[c][2] && b[x][2] == b[c][1]  &&r==3   )
                        printf("POSSIBLE\n");
                 else if ( b[z][1] == b [x][1] && b[z][2] == b[c][1] && b[x][2] == b[c][2]  &&r==3  )
                        printf("POSSIBLE\n");
                 else if (  b[z][1] == b [x][2] && b[z][2] == b[c][2] && b[x][1] == b[c][1]&&r==3  )
                        printf("POSSIBLE\n");
                 else if ( b[z][1] == b [x][2] && b[z][2] == b[c][1] && b[x][1] == b[c][2] &&r==3   )
                        printf("POSSIBLE\n");
                 else
                        printf("IMPOSSIBLE\n");

                memset(a,0,sizeof(a));
                memset(b,0,sizeof(b));
                memset(d,0,sizeof(d));
         }
         return 0;
}


你可能感兴趣的:(UVa 1587 - Box)