fork download
  1. #define R r[i]
  2. #define Z return
  3. #define _(B,D,E)for(int B=E;B<D;B++)
  4. struct{int x,y,u,p;}r[25],*S;A,M,N,U,V,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(x,y){for(x=0;++x<A&&P[x];);if(x/A){_(i,V,0)printf("%*.*s\n",U,U,P+i*U);exit(0);}y=x/U;x-=y*U;_(i,N,0)!R.u&T(x,y,R.x,R.y)?R.u=1,F(L(x,y,R.x,R.y,65+i)),L(x,y,R.x,R.y,R.u=0):0;}O(i,y){if(!R.u){if(!T(0,y,R.x,R.y))Z;R.u=1;L(R.p=0,y,R.x,R.y,65+i);y+=R.y;}if(y-V||F())_(j,N,0)if(j-i&!r[j].u)for(O(j,y);r[j].x-r[j+1].x|r[j].y-r[++j].y;);L(R.p,y-=R.y,R.x,R.y,R.u=0);}Q(i,x){if(!R.u){if(R.x>U-x)Z;R.u=1;L(R.p=x,0,R.x,R.y,65+i);x+=R.x;}if(x-U||O(i,1))_(j,N,0)j-i&!r[j].u?Q(j,x):0;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(X){_(i,25&&!++N|scanf("%d%d\n",&R.x,&R.y)==2,0);_(i,N,0)A+=R.x*R.y,X=R.x>X?R.x:X,Y=R.y>Y?R.y:Y;_(i,A+1,1)!(A%i|i<Y|A/i<X)?S=realloc(S,-~M*16),S[M].y=i,S[M++].x=A/i:0;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,65+i),Q(i,R.x),R.u=0;}puts("0");exit(1);}
Success #stdin #stdout 0s 9432KB
stdin
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
stdout
BBBBKK
DDDDJJ
AAAGGG
AAAGGG
LMMMMM
CCIIIH
EEIIIH
FFFFFH
FFFFFH