Source code for submission s862

fp.cpp

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4.  
  5. #include<cmath>
  6. #include<cctype>
  7. #include<climits>
  8. #include<algorithm>
  9. #include<utility>
  10. #include<string>
  11.  
  12. #include<deque>
  13. #include<list>
  14. #include<map>
  15. #include<queue>
  16. #include<set>
  17. #include<stack>
  18. #include<vector>
  19.  
  20. using namespace std;
  21.  
  22. #define REP(i,N) for (int i = 0; i < (N); i++)
  23. #define FOR(i,a,b) for (int i = (a); i <= (b); i++)
  24. #define FORI(i,a,b) for (int i = (a); i < (b); i++)
  25. #define FORD(i,a,b) for (int i = (a)-1; i >= (b); i--)
  26. #define DP(arg...) fprintf(stderr, ## arg)
  27.  
  28. typedef long long ll;
  29. typedef long double ld;
  30. typedef pair<int,int> ii;
  31.  
  32. char P[15][5][6] = {
  33. {
  34. {".XX.."},
  35. {"XX..."},
  36. {".X..."},
  37. {"....."},
  38. {"....."}
  39. },
  40. {
  41. {"X...."},
  42. {"X...."},
  43. {"X...."},
  44. {"X...."},
  45. {"X...."}
  46. },
  47. {
  48. {"X...."},
  49. {"X...."},
  50. {"X...."},
  51. {"XX..."},
  52. {"....."}
  53. },
  54. {
  55. {".X..."},
  56. {".X..."},
  57. {"XX..."},
  58. {"X...."},
  59. {"....."}
  60. },
  61. {
  62. {"XX..."},
  63. {"XX..."},
  64. {"X...."},
  65. {"....."},
  66. {"....."}
  67. },
  68. {
  69. {"XXX.."},
  70. {".X..."},
  71. {".X..."},
  72. {"....."},
  73. {"....."}
  74. },
  75. {
  76. {"X.X.."},
  77. {"XXX.."},
  78. {"....."},
  79. {"....."},
  80. {"....."}
  81. },
  82. {
  83. {"X...."},
  84. {"X...."},
  85. {"XXX.."},
  86. {"....."},
  87. {"....."}
  88. },
  89. {
  90. {"X...."},
  91. {"XX..."},
  92. {".XX.."},
  93. {"....."},
  94. {"....."}
  95. },
  96. {
  97. {".X..."},
  98. {"XXX.."},
  99. {".X..."},
  100. {"....."},
  101. {"....."}
  102. },
  103. {
  104. {".X..."},
  105. {"XX..."},
  106. {".X..."},
  107. {".X..."},
  108. {"....."}
  109. },
  110. {
  111. {"XX..."},
  112. {".X..."},
  113. {".XX.."},
  114. {"....."},
  115. {"....."}
  116. }
  117. };
  118.  
  119. char A[4];
  120. int a[4];
  121. char poz[12][8][5][6];
  122. int op[4][2] = {{1,1}, {1, -1}, {-1, 1}, {-1, -1}};
  123. int res1[25][25];
  124. int res2[25][25];
  125.  
  126. int table(char c) {
  127. switch(c) {
  128. case 'F': return 0;
  129. case 'I': return 1;
  130. case 'L': return 2;
  131. case 'N': return 3;
  132. case 'P': return 4;
  133. case 'T': return 5;
  134. case 'U': return 6;
  135. case 'V': return 7;
  136. case 'W': return 8;
  137. case 'X': return 9;
  138. case 'Y': return 10;
  139. case 'Z': return 11;
  140. }
  141. }
  142.  
  143. void solve() {
  144. REP(i, 4) a[i] = table(A[i]);
  145. bool exist = 0;
  146. REP(i, 8) REP(j, 8) REP(x1, 5) REP(y1, 5) {
  147. REP(p, 10) REP(q, 10) res1[p][q] = 0;
  148. REP(p, 5) REP(q, 5) {
  149. char c = poz[a[0]][i][p][q];
  150. res1[p][q] += (c=='X')?1:0;
  151. c = poz[a[1]][j][p][q];
  152. res1[p+x1][q+y1] += (c=='X')?1:0;
  153. }
  154. bool kolize = 0;
  155. REP(p, 10) REP(q, 10) if (res1[p][q]>1) kolize = 1;
  156. if (kolize) continue;
  157. REP(k, 8) REP(l, 8) REP(x2, 5) REP(y2, 5) {
  158. REP(p, 10) REP(q, 10) res2[p][q] = 0;
  159. REP(p, 5) REP(q, 5) {
  160. char c = poz[a[2]][k][p][q];
  161. res2[p][q] += (c=='X')?1:0;
  162. c = poz[a[3]][l][p][q];
  163. res2[p+x2][q+y2] += (c=='X')?1:0;
  164. }
  165. bool kolize = 0;
  166. REP(p, 10) REP(q, 10) if (res2[p][q]>1) kolize = 1;
  167. if (kolize) continue;
  168.  
  169. bool stejne = 1;
  170. int pp1, qq1, pp2, qq2;
  171. REP(p, 10) REP(q, 10) {
  172. if (res1[p][q]==1) {
  173. pp1 = p; qq1 = q; goto pryc1;
  174. }
  175. }
  176. pryc1:
  177. REP(p, 10) REP(q, 10) {
  178. if (res2[p][q]==1) {
  179. pp2 = p; qq2 = q; goto pryc2;
  180. }
  181. }
  182. pryc2:
  183.  
  184. REP(p, 10) REP(q, 10) if (res1[p+pp1][q+qq1]!=res2[p+pp2][q+qq2]) stejne = false;
  185. if (stejne) {
  186. exist = true;
  187. goto ven;
  188. }
  189. }
  190. }
  191. ven:
  192. if (exist) printf("YES\n");
  193. else printf("NO\n");
  194. }
  195.  
  196. int main() {
  197. REP(i, 12) {
  198. //REP(k, 4) {
  199. REP(x, 5) REP(y, 5) {
  200. poz[i][0][x][y] = P[i][x][y];
  201. poz[i][1][x][y] = P[i][4-x][y];
  202. poz[i][2][x][y] = P[i][x][4-y];
  203. poz[i][3][x][y] = P[i][4-x][4-y];
  204. poz[i][4][x][y] = P[i][y][x];
  205. poz[i][5][x][y] = P[i][4-y][4-x];
  206. poz[i][6][x][y] = P[i][y][4-x];
  207. poz[i][7][x][y] = P[i][4-y][x];
  208. }
  209. //}
  210. }
  211. while (scanf(" %c %c %c %c", &A[0], &A[1], &A[2], &A[3]) != EOF) {
  212. solve();
  213. }
  214. return 0;
  215. }
  216.