#include #include int w,n,result[10000],border[10000],check[10000]; typedef struct{ int ans[3]; int order; int id; } block; block c[30000]; int cmp(const void*,const void*); int cmp_id(const void*,const void*); int sum(block a){ return a.ans[0]+a.ans[1]+a.ans[2]; } void print(){ block copy[30000]; int i,j; memcpy(copy,c,sizeof(c)); for(i=0;i=3-j) printf("#"); else printf("."); if(copy[i].ans[1]>=3-j) printf("#"); else printf("."); if(copy[i].ans[2]>=3-j) printf("#"); else printf("."); printf("\n"); } } printf("--\n"); } int main(){ int h,i,j,now,lj; char s; scanf("%d %d %d",&h,&w,&n); getchar(); for(i=0;i=n){ for(;icheck[i]){ if(i>2){ now=border[i-3]; }else{ now=0; } while(check[i]2){ c[now].ans[i-c[now].order]+=(j=3-c[now].ans[i-c[now].order]); }else{ j=3-c[now].ans[i-c[now].order]; c[now].ans[i-c[now].order]+=(j=(j>result[i]-check[i])?result[i]-check[i]:j); } check[i]+=j; now++; } }else if(result[i]1){ now=border[i-2]; }else{ now=0; } for(j=now;j1){ c[j].ans[i-c[j].order]--; check[i]--; if(check[i]==result[i]) break; } } for(j=border[i]-1;result[i]0){ if(now2){ now=border[i-3]; }else{ now=0; } } } */ } qsort(c,n,sizeof(block),cmp_id); for(i=0;i=3-j) printf("#"); else printf("."); if(c[i].ans[1]>=3-j) printf("#"); else printf("."); if(c[i].ans[2]>=3-j) printf("#"); else printf("."); printf("\n"); } } return 0; } int cmp(const void* a,const void* b){ return ((block *)a)->order-((block *)b)->order; } int cmp_id(const void *a,const void *b){ return ((block*)a)->id-((block*)b)->id; }