Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1 2
- 1 5
- 4 5
- 3 6
- 1 1
- 1 5
- 2 6
- XYYYYY
- ZZZZZZ
- ZZZZZZ
- 1 1
- 2 2
- 1 1
- 1 2
- 1 2
- 2 1
- 2 1
- AAB
- DEB
- DCC
- 3 2
- 4 1
- 2 1
- 4 1
- 2 1
- 5 2
- 3 2
- 1 4
- 3 2
- 2 1
- 2 1
- 1 1
- 5 1
- AAABBBBEE
- AAACCDDDD
- FFFFFGGGH
- FFFFFGGGH
- IIIJJKKLH
- IIIMMMMMH
- #define R r[i]
- #define Z return
- #define _(B,D,E) for(int B=E;B<D;B++)
- 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);}
- #define R r[i]
- #define Z return
- #define _(B,D,E) for(int B=E;B<D;B++)
- struct {
- int x,y,u,p;
- } r[25],*S;
- int A,M,N,U,V,X,Y;
- char *P;
- test_space(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;
- }
- place_rect(x,y,w,h,c){
- _(I,x+w,x)
- _(J,y+h,y)P[J*U+I] = c;
- }
- fill_rest() {
- 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 & test_space(x, y, R.x, R.y))
- R.u = 1,
- place_rect(x, y, R.x, R.y, 'A'+i),
- fill_rest(),
- R.u = 0,
- place_rect(x, y, R.x, R.y, 0);
- }
- fill_y(i,y) {
- if (!R.u) {
- if (!test_space(0, y, R.x, R.y)) Z;
- R.u = 1;
- R.p = 0;
- place_rect(0, y, R.x, R.y, 'A'+i);
- y += R.y;
- }
- if (y == V) fill_rest();
- else _(j,N,0)
- if (j!=i && !r[j].u){ fill_y(j, y);
- while (r[j].x^r[j+1].x||r[j].y^r[j+1].y)j++;
- }
- R.u = 0;
- place_rect(R.p, (y -= R.y), R.x, R.y, 0);
- }
- fill_x(i,x) {
- if (!R.u) {
- if (R.x > U - x) Z;
- R.u = 1;
- R.p = x;
- place_rect(x, 0, R.x, R.y, 'A'+i);
- x += R.x;
- }
- if (x == U) fill_y(i, 1);
- else
- _(j,N,0)
- if (j!=i && !r[j].u) fill_x(j, x);
- place_rect((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,
- place_rect(0, 0, R.x, R.y, 'A'+i),
- fill_x(i, R.x),
- R.u = 0;
- }
- printf("0n");
- exit(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement