fork download
  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. int in[15];
  5. int perm[4];
  6. int dfs(int a,int b,int c,int d,int e){
  7. if(b<=0||c<=0||d<=0||e<0)return 0;
  8. //printf("%d %d %d %d %d\n",a,b,c,d,e);
  9. if(a==3){
  10. if(e==0){
  11. int pos=(perm[a]+1)*3;
  12. if(b==in[pos]&&c==in[pos+1]&&d==in[pos+2])return 1;
  13. if(c==in[pos]&&d==in[pos+1]&&b==in[pos+2])return 1;
  14. if(d==in[pos]&&b==in[pos+1]&&c==in[pos+2])return 1;
  15. }
  16. return 0;
  17. }
  18. int ret=0;
  19. if(e){
  20. if(b==in[perm[a]*3+3]){
  21. ret|=dfs(a+1,c-in[perm[a]*3+4],d,e-in[perm[a]*3+5],0);
  22. ret|=dfs(a+1,c-in[perm[a]*3+4],d,e,180-in[perm[a]*3+5]);
  23. ret|=dfs(a+1,180-in[perm[a]*3+4],c,d,e-in[perm[a]*3+5]);
  24. }
  25. if(b==in[perm[a]*3+4]){
  26. ret|=dfs(a+1,c-in[perm[a]*3+5],d,e-in[perm[a]*3+3],0);
  27. ret|=dfs(a+1,c-in[perm[a]*3+5],d,e,180-in[perm[a]*3+3]);
  28. ret|=dfs(a+1,180-in[perm[a]*3+5],c,d,e-in[perm[a]*3+3]);
  29. }
  30. if(b==in[perm[a]*3+5]){
  31. ret|=dfs(a+1,c-in[perm[a]*3+3],d,e-in[perm[a]*3+4],0);
  32. ret|=dfs(a+1,c-in[perm[a]*3+3],d,e,180-in[perm[a]*3+4]);
  33. ret|=dfs(a+1,180-in[perm[a]*3+3],c,d,e-in[perm[a]*3+4]);
  34. }
  35. if(c==in[perm[a]*3+3]){
  36. ret|=dfs(a+1,d-in[perm[a]*3+4],e,b-in[perm[a]*3+5],0);
  37. ret|=dfs(a+1,d-in[perm[a]*3+4],e,b,180-in[perm[a]*3+5]);
  38. ret|=dfs(a+1,180-in[perm[a]*3+4],d,e,b-in[perm[a]*3+5]);
  39. }
  40. if(c==in[perm[a]*3+4]){
  41. ret|=dfs(a+1,d-in[perm[a]*3+5],e,b-in[perm[a]*3+3],0);
  42. ret|=dfs(a+1,d-in[perm[a]*3+5],e,b,180-in[perm[a]*3+3]);
  43. ret|=dfs(a+1,180-in[perm[a]*3+5],d,e,b-in[perm[a]*3+3]);
  44. }
  45. if(c==in[perm[a]*3+5]){
  46. ret|=dfs(a+1,d-in[perm[a]*3+3],e,b-in[perm[a]*3+4],0);
  47. ret|=dfs(a+1,d-in[perm[a]*3+3],e,b,180-in[perm[a]*3+4]);
  48. ret|=dfs(a+1,180-in[perm[a]*3+3],d,e,b-in[perm[a]*3+4]);
  49. }
  50. if(d==in[perm[a]*3+3]){
  51. ret|=dfs(a+1,e-in[perm[a]*3+4],b,c-in[perm[a]*3+5],0);
  52. ret|=dfs(a+1,e-in[perm[a]*3+4],b,c,180-in[perm[a]*3+5]);
  53. ret|=dfs(a+1,180-in[perm[a]*3+4],e,b,c-in[perm[a]*3+5]);
  54. }
  55. if(d==in[perm[a]*3+4]){
  56. ret|=dfs(a+1,e-in[perm[a]*3+5],b,c-in[perm[a]*3+3],0);
  57. ret|=dfs(a+1,e-in[perm[a]*3+5],b,c,180-in[perm[a]*3+3]);
  58. ret|=dfs(a+1,180-in[perm[a]*3+5],e,b,c-in[perm[a]*3+3]);
  59. }
  60. if(d==in[perm[a]*3+5]){
  61. ret|=dfs(a+1,e-in[perm[a]*3+3],b,c-in[perm[a]*3+4],0);
  62. ret|=dfs(a+1,e-in[perm[a]*3+3],b,c,180-in[perm[a]*3+4]);
  63. ret|=dfs(a+1,180-in[perm[a]*3+3],e,b,c-in[perm[a]*3+4]);
  64. }
  65. if(e==in[perm[a]*3+3]){
  66. ret|=dfs(a+1,b-in[perm[a]*3+4],c,d-in[perm[a]*3+5],0);
  67. ret|=dfs(a+1,b-in[perm[a]*3+4],c,d,180-in[perm[a]*3+5]);
  68. ret|=dfs(a+1,180-in[perm[a]*3+4],b,c,d-in[perm[a]*3+5]);
  69. }
  70. if(e==in[perm[a]*3+4]){
  71. ret|=dfs(a+1,b-in[perm[a]*3+5],c,d-in[perm[a]*3+3],0);
  72. ret|=dfs(a+1,b-in[perm[a]*3+5],c,d,180-in[perm[a]*3+3]);
  73. ret|=dfs(a+1,180-in[perm[a]*3+5],b,c,d-in[perm[a]*3+3]);
  74. }
  75. if(e==in[perm[a]*3+5]){
  76. ret|=dfs(a+1,b-in[perm[a]*3+3],c,d-in[perm[a]*3+4],0);
  77. ret|=dfs(a+1,b-in[perm[a]*3+3],c,d,180-in[perm[a]*3+4]);
  78. ret|=dfs(a+1,180-in[perm[a]*3+3],b,c,d-in[perm[a]*3+4]);
  79. }
  80. }else{
  81. if(b==in[perm[a]*3+3]){
  82. ret|=dfs(a+1,180-in[perm[a]*3+4],c,d-in[perm[a]*3+5],0);
  83. ret|=dfs(a+1,c-in[perm[a]*3+4],d,180-in[perm[a]*3+5],0);
  84. ret|=dfs(a+1,180-in[perm[a]*3+4],c,d,180-in[perm[a]*3+5]);
  85. }
  86. if(b==in[perm[a]*3+4]){
  87. ret|=dfs(a+1,180-in[perm[a]*3+5],c,d-in[perm[a]*3+3],0);
  88. ret|=dfs(a+1,c-in[perm[a]*3+5],d,180-in[perm[a]*3+3],0);
  89. ret|=dfs(a+1,180-in[perm[a]*3+5],c,d,180-in[perm[a]*3+3]);
  90. }
  91. if(b==in[perm[a]*3+5]){
  92. ret|=dfs(a+1,180-in[perm[a]*3+3],c,d-in[perm[a]*3+4],0);
  93. ret|=dfs(a+1,c-in[perm[a]*3+3],d,180-in[perm[a]*3+4],0);
  94. ret|=dfs(a+1,180-in[perm[a]*3+3],c,d,180-in[perm[a]*3+4]);
  95. }
  96. if(c==in[perm[a]*3+3]){
  97. ret|=dfs(a+1,180-in[perm[a]*3+4],d,b-in[perm[a]*3+5],0);
  98. ret|=dfs(a+1,d-in[perm[a]*3+4],b,180-in[perm[a]*3+5],0);
  99. ret|=dfs(a+1,180-in[perm[a]*3+4],d,b,180-in[perm[a]*3+5]);
  100. }
  101. if(c==in[perm[a]*3+4]){
  102. ret|=dfs(a+1,180-in[perm[a]*3+5],d,b-in[perm[a]*3+3],0);
  103. ret|=dfs(a+1,d-in[perm[a]*3+5],b,180-in[perm[a]*3+3],0);
  104. ret|=dfs(a+1,180-in[perm[a]*3+5],d,b,180-in[perm[a]*3+3]);
  105. }
  106. if(c==in[perm[a]*3+5]){
  107. ret|=dfs(a+1,180-in[perm[a]*3+3],d,b-in[perm[a]*3+4],0);
  108. ret|=dfs(a+1,d-in[perm[a]*3+3],b,180-in[perm[a]*3+4],0);
  109. ret|=dfs(a+1,180-in[perm[a]*3+3],d,b,180-in[perm[a]*3+4]);
  110. }
  111. if(d==in[perm[a]*3+3]){
  112. ret|=dfs(a+1,180-in[perm[a]*3+4],b,c-in[perm[a]*3+5],0);
  113. ret|=dfs(a+1,b-in[perm[a]*3+4],c,180-in[perm[a]*3+5],0);
  114. ret|=dfs(a+1,180-in[perm[a]*3+4],b,c,180-in[perm[a]*3+5]);
  115. }
  116. if(d==in[perm[a]*3+4]){
  117. ret|=dfs(a+1,180-in[perm[a]*3+5],b,c-in[perm[a]*3+3],0);
  118. ret|=dfs(a+1,b-in[perm[a]*3+5],c,180-in[perm[a]*3+3],0);
  119. ret|=dfs(a+1,180-in[perm[a]*3+5],b,c,180-in[perm[a]*3+3]);
  120. }
  121. if(d==in[perm[a]*3+5]){
  122. ret|=dfs(a+1,180-in[perm[a]*3+3],b,c-in[perm[a]*3+4],0);
  123. ret|=dfs(a+1,b-in[perm[a]*3+3],c,180-in[perm[a]*3+4],0);
  124. ret|=dfs(a+1,180-in[perm[a]*3+3],b,c,180-in[perm[a]*3+4]);
  125. }
  126. }
  127. return ret;
  128. }
  129. int main(){
  130. while(scanf("%d",in),in[0]){
  131. for(int i=1;i<15;i++)scanf("%d",in+i);
  132. for(int i=0;i<4;i++)perm[i]=i;
  133. bool ok=false;
  134. do{
  135. int t=dfs(0,in[0],in[1],in[2],0);
  136. if(t){
  137. ok=true;
  138. break;
  139. }
  140. }while(next_permutation(perm,perm+4));
  141. for(int i=0;i<4;i++)perm[i]=i;
  142. do{
  143. for(int i=0;i<3;i++)
  144. for(int j=0;j<3;j++)
  145. for(int k=0;k<3;k++)
  146. for(int l=0;l<3;l++){
  147. if(in[perm[0]*3+i+3]+in[perm[1]*3+j+3]+in[perm[2]*3+k+3]+in[perm[3]*3+l+3]!=360)continue;
  148. for(int m=0;m<3;m++){
  149. bool dame=false;
  150. if(in[m]!=in[perm[0]*3+(i+2)%3+3]+in[perm[1]*3+(j+1)%3+3])dame=true;
  151. if(in[(m+1)%3]!=in[perm[1]*3+(j+2)%3+3]+in[perm[2]*3+(k+1)%3+3])dame=true;
  152. if(in[(m+2)%3]!=in[perm[2]*3+(k+2)%3+3]+in[perm[3]*3+(l+1)%3+3])dame=true;
  153. if(180!=in[perm[3]*3+(l+2)%3+3]+in[perm[0]*3+(i+1)%3+3])dame=true;
  154. if(!dame)ok=true;
  155. }
  156. }
  157. }while(next_permutation(perm,perm+4));
  158. if(ok)printf("yes\n");
  159. else printf("no\n");
  160. }
  161. }
Success #stdin #stdout 0s 3300KB
stdin
Standard input is empty
stdout
Standard output is empty