Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Mar 25th, 2012  |  syntax: None  |  size: 2.59 KB  |  hits: 17  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4.  
  5. using namespace std;
  6.  
  7. struct tri {
  8.   int v[3];
  9.   int&operator[](int i) { return v[i]; }
  10.   tri() { }
  11.   tri(int v0, int v1, int v2) { v[0]=v0; v[1]=v1; v[2]=v2; }
  12. };
  13. bool cmp(tri a, tri b)
  14. {
  15.   for(int i=0; i<3; ++i) if(a[i]<b[i]) return true; else if(a[i]>b[i]) return false;
  16.   return false;
  17. }
  18. void rotate(tri& a)
  19. {
  20.   a=tri(a[1],a[2],a[0]);
  21. }
  22. void pushrot(vector<tri>& v)
  23. {
  24.   tri t=v.back();
  25.   rotate(t); v.push_back(t); rotate(t); v.push_back(t);
  26. }
  27.  
  28. int main()
  29. {
  30.   tri v;
  31.   while(scanf("%d%d%d", &v[0], &v[1], &v[2]), v[0]) {
  32.     tri p[4];
  33.     for(int i=0; i<4; ++i)
  34.       for(int j=0; j<3; ++j)
  35.         scanf("%d", &p[i][j]);
  36.     sort(p, p+4, cmp);
  37.     do {
  38.       for(int i0=0; i0<3; ++i0) {
  39.         rotate(p[0]);
  40.         for(int i1=0; i1<3; ++i1) {
  41.           rotate(p[1]);
  42.           for(int i2=0; i2<3; ++i2) {
  43.             rotate(p[2]);
  44.             for(int i3=0; i3<3; ++i3) {
  45.               rotate(p[3]);
  46.               vector<tri> t01, t23, t012, t0123;
  47.               if(p[0][0]+p[1][0]==180) {
  48.                 t01.push_back(tri(p[1][1], p[0][1]+p[1][2], p[2][0])); pushrot(t01);
  49.                 t01.push_back(tri(p[0][1], p[0][2]+p[1][1], p[1][2])); pushrot(t01);
  50.               }
  51.               if(p[2][0]+p[3][0]==180) {
  52.                 t23.push_back(tri(p[3][1], p[2][1]+p[3][2], p[2][2])); pushrot(t23);
  53.                 t23.push_back(tri(p[2][1], p[2][2]+p[3][1], p[3][2])); pushrot(t23);
  54.               }
  55.               for(int i=0; i<(int)t01.size(); ++i) {
  56.                 tri x=t01[i];
  57.                 if(x[0]+p[2][0]==180) {
  58.                   t012.push_back(tri(p[2][1], x[1]+p[2][2], x[2])); pushrot(t012);
  59.                   t012.push_back(tri(x[1], x[2]+p[2][1], p[2][2])); pushrot(t012);
  60.                 }
  61.               }
  62.               for(int i=0; i<(int)t01.size(); ++i) {
  63.                 for(int j=0; j<(int)t23.size(); ++j) {
  64.                   tri x=t01[i], y=t23[j];
  65.                   if(x[0]+y[0]==180) {
  66.                     t0123.push_back(tri(y[1], x[1]+y[2], x[2]));
  67.                     t0123.push_back(tri(x[1], x[2]+y[1], y[2]));
  68.                   }
  69.                 }
  70.               }
  71.               for(int i=0; i<(int)t012.size(); ++i) {
  72.                 tri x=t012[i];
  73.                 if(x[0]+p[3][0]==180) {
  74.                   t0123.push_back(tri(p[3][1], x[1]+p[3][2], x[2]));
  75.                   t0123.push_back(tri(x[1], x[2]+p[3][1], p[3][2]));
  76.                 }
  77.               }
  78.               if(p[0][1]+p[1][0]+p[3][2]==180 && p[1][2]+p[2][1]+p[3][0]==180 && p[2][0]+p[3][1]+p[0][2]==180)
  79.                 t0123.push_back(tri(p[0][0], p[1][1], p[2][2]));
  80.               if(p[0][1]+p[1][2]==180 && p[1][1]+p[3][0]+p[2][2]==180 && p[2][1]+p[0][2]==180)
  81.                 t0123.push_back(tri(p[0][0], p[1][0]+p[3][1], p[2][0]+p[3][2]));
  82.               for(int i4=0; i4<3; ++i4) {
  83.                 rotate(v);
  84.                 for(int i=0; i<(int)t0123.size(); ++i)
  85.                   if(v[0]==t0123[i][0]&&v[1]==t0123[i][1]&&v[2]==t0123[i][2])
  86.                     goto yes;
  87.               }
  88.             }
  89.           }
  90.         }
  91.       }
  92.     } while(next_permutation(p, p+4, cmp));
  93.     puts("no"); continue;
  94.   yes:
  95.     puts("yes");
  96.   }
  97.   return 0;
  98. }