SHARE
TWEET

Untitled

a guest Jun 27th, 2019 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top