#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;icheck[i]){ c[i].ans[j]=1; check[c[i].order+j]++; break; } } } qsort(c,n,sizeof(block),cmp); i=0; j=0; lj=0; while(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++; } } /* while(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; }