Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. 1 2
  2. 1 5
  3. 4 5
  4. 3 6
  5.  
  6. 1 1
  7. 1 5
  8. 2 6
  9.  
  10. XYYYYY
  11. ZZZZZZ
  12. ZZZZZZ
  13.  
  14. 1 1
  15. 2 2
  16.  
  17. 1 1
  18. 1 2
  19. 1 2
  20. 2 1
  21. 2 1
  22.  
  23. AAB
  24. DEB
  25. DCC
  26.  
  27. 3 2
  28. 4 1
  29. 2 1
  30. 4 1
  31. 2 1
  32. 5 2
  33. 3 2
  34. 1 4
  35. 3 2
  36. 2 1
  37. 2 1
  38. 1 1
  39. 5 1
  40.  
  41. AAABBBBEE
  42. AAACCDDDD
  43. FFFFFGGGH
  44. FFFFFGGGH
  45. IIIJJKKLH
  46. IIIMMMMMH
  47.  
  48. #define R r[i]
  49. #define Z return
  50. #define _(B,D,E) for(int B=E;B<D;B++)
  51. struct{int x,y,u,p;}r[25],*S;int A,M,N,U,V,X,Y;char *P;T(x,y,w,h){_(I,x+w,x)_(J,y+h,y)if(I/U|J/V|P[J*U+I])Z 0;Z 1;}L(x,y,w,h,c){_(I,x+w,x)_(J,y+h,y)P[J*U+I]=c;}F(){int x=0,y;while(++x<A)if(!P[x])break;if(x/A){_(i,V,0)printf("%*.*sn",U,U,P+i*U);exit(0);}y=x/U;x-=y*U;_(i,N,0)if(!R.u&T(x,y,R.x,R.y))R.u=1,L(x,y,R.x,R.y,'A'+i),F(),R.u=0,L(x,y,R.x,R.y,0);}O(i,y){if(!R.u){if(!T(0,y,R.x,R.y))Z;R.u=1;R.p=0;L(0,y,R.x,R.y,'A'+i);y+=R.y;}if(y-V||F())_(j,N,0)if(j-i&!r[j].u){O(j,y);while(r[j].x-r[j+1].x|r[j].y-r[j+1].y)j++;}R.u=0;L(R.p,(y-=R.y),R.x,R.y,0);}Q(i,x){if(!R.u){if(R.x>U-x)Z;R.u=1;R.p=x;L(x,0,R.x,R.y,'A'+i);x+=R.x;}if(x-U||O(i,1))_(j,N,0)if(j-i&!r[j].u)Q(j,x);L(x-=R.x,0,R.x,R.y,0);R.u=0;}C(int*a,int*b){Z*a-*b?*a-*b:a[1]-b[1];}main(){_(i,25,0)if(++N&scanf("%d%dn",&R.x,&R.y)-2)break;_(i,N,0){A+=R.x*R.y;if(R.x>X)X=R.x;if(R.y>Y)Y=R.y;}_(i,A+1,1)if(!(A%i)){if(i<Y|A/i<X)continue;M++;S=realloc(S,M*16);S[M-1].y=i;S[M-1].x=A/i;}qsort(S,M,16,C);P=calloc(A+1,1);_(j,M,0){U=S[j].x;V=S[j].y;_(i,N,0)R.u=1,L(0,0,R.x,R.y,'A'+i),Q(i,R.x),R.u=0;}printf("0n");exit(1);}
  52.  
  53. #define R r[i]
  54. #define Z return
  55. #define _(B,D,E) for(int B=E;B<D;B++)
  56. struct {
  57. int x,y,u,p;
  58. } r[25],*S;
  59. int A,M,N,U,V,X,Y;
  60. char *P;
  61.  
  62. test_space(x,y,w,h) {
  63. _(I,x+w,x)
  64. _(J,y+h,y)
  65. if ( I >= U |
  66. J >= V |
  67. P[J*U+I]) Z 0;
  68. Z 1;
  69. }
  70. place_rect(x,y,w,h,c){
  71. _(I,x+w,x)
  72. _(J,y+h,y)P[J*U+I] = c;
  73. }
  74.  
  75. fill_rest() {
  76. int x=0,y;
  77. while(++x<A) if (!P[x])break;
  78. if (x>=A) {
  79. _(i,V,0) printf("%*.*sn", U,U, P+i*U);
  80. exit(0);
  81. }
  82. y = x / U; x -= y*U;
  83.  
  84. _(i,N,0)
  85. if (!R.u & test_space(x, y, R.x, R.y))
  86. R.u = 1,
  87. place_rect(x, y, R.x, R.y, 'A'+i),
  88. fill_rest(),
  89. R.u = 0,
  90. place_rect(x, y, R.x, R.y, 0);
  91.  
  92. }
  93.  
  94. fill_y(i,y) {
  95. if (!R.u) {
  96. if (!test_space(0, y, R.x, R.y)) Z;
  97. R.u = 1;
  98. R.p = 0;
  99. place_rect(0, y, R.x, R.y, 'A'+i);
  100. y += R.y;
  101. }
  102. if (y == V) fill_rest();
  103. else _(j,N,0)
  104. if (j!=i && !r[j].u){ fill_y(j, y);
  105. while (r[j].x^r[j+1].x||r[j].y^r[j+1].y)j++;
  106. }
  107. R.u = 0;
  108. place_rect(R.p, (y -= R.y), R.x, R.y, 0);
  109. }
  110.  
  111. fill_x(i,x) {
  112. if (!R.u) {
  113. if (R.x > U - x) Z;
  114. R.u = 1;
  115. R.p = x;
  116. place_rect(x, 0, R.x, R.y, 'A'+i);
  117. x += R.x;
  118. }
  119. if (x == U) fill_y(i, 1);
  120. else
  121. _(j,N,0)
  122. if (j!=i && !r[j].u) fill_x(j, x);
  123. place_rect((x -= R.x), 0, R.x, R.y, 0);
  124. R.u = 0;
  125. }
  126. C(int*a,int*b) {
  127. Z *a^*b?*a-*b:a[1]-b[1];
  128. }
  129.  
  130.  
  131. main() {
  132. _(i,25,0)
  133. if (++N&&scanf("%d %dn", &R.x, &R.y)!=2) break;
  134. _(i,N,0){
  135. A+=R.x*R.y;
  136. if(R.x>X)X=R.x;
  137. if(R.y>Y)Y=R.y;
  138. }
  139. _(i,A+1,1)
  140. if (!(A%i)) {
  141. if (i < Y | A/i < X) continue;
  142. M++;
  143. S = realloc(S,M*16);
  144. S[M-1].y=i;
  145. S[M-1].x=A/i;
  146. }
  147. qsort(S, M, 16,C);
  148. P = calloc(A + 1,1);
  149. _(j,M,0){
  150. U = S[j].x; V = S[j].y;
  151. _(i,N,0)
  152. R.u = 1,
  153. place_rect(0, 0, R.x, R.y, 'A'+i),
  154. fill_x(i, R.x),
  155. R.u = 0;
  156. }
  157. printf("0n");
  158. exit(1);
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement