Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
想自虐,一个地方把i写成1WA了N多次,附AC代码# include <stdio.h> # include <stdbool.h> int w,h,t; struct refer { int t; int lx,ly; int rx,ry; }data[105]; struct point { int x,y; int t; }res[105],resfinal[105]; bool map[105][101][101]; int len[101]; int num; void setmap1(int now,int lx,int ly,int rx,int ry) { if(rx>=lx&&ry>=ly&&now<=t+1&&now>=1) { int i,j; for(i=lx;i<=rx;i++) for(j=ly;j<=ry;j++) map[now][i][j]=0; setmap1(now+1,lx+1,ly+1,rx-1,ry-1); } else return; } void setmap2(int now,int lx,int ly,int rx,int ry) { if(rx>=lx&&ry>=ly&&now<=t+1&&now>=1) { int i,j; for(i=lx;i<=rx;i++) for(j=ly;j<=ry;j++) map[now][i][j]=0; setmap2(now-1,lx+1,ly+1,rx-1,ry-1); } else return; } bool reset1(int now) { bool flag=0; int i,j,tlen=0,tx,ty; for(i=1;i<=w;i++) for(j=1;j<=h;j++) if(map[now][i][j]) { if((map[now-1][i][j])||(map[now-1][i+1][j]&&i+1<=w)||(map[now-1][i-1][j]&&i-1>=1)||(map[now-1][i][j+1]&&j+1<=h)||(map[now-1][i][j-1]&&j-1>=1)) { tlen++; tx=i; ty=j; } else { map[now][i][j]=0; flag=1; } } len[now]=tlen; if(tlen==1) { res[now].x=tx; res[now].y=ty; } return flag; } bool reset2(int now) { bool flag=0; int i,j,tlen=0,tx,ty; for(i=1;i<=w;i++) for(j=1;j<=h;j++) if(map[now][i][j]) { if((map[now+1][i][j])||(map[now+1][i+1][j]&&i+1<=w)||(map[now+1][i-1][j]&&i-1>=1)||(map[now+1][i][j+1]&&j+1<=h)||(map[now+1][i][j-1]&&j-1>=1)) { tlen++; tx=i; ty=j; } else { map[now][i][j]=0; flag=1; } } len[now]=tlen; if(tlen==1) { res[now].x=tx; res[now].y=ty; } return flag; } int main() { int casenum=1; while(1) { scanf("%d %d %d",&w,&h,&t); memset(map,1,sizeof(map)); memset(len,0,sizeof(len)); if(!w&&!h&&!t) break; int i,j; scanf("%d",&num); for(i=1;i<=num;i++) { scanf("%d %d %d %d %d",&data[i].t,&data[i].lx,&data[i].ly,&data[i].rx,&data[i].ry); } /*-------------------buildmap----------------------------------*/ for(i=1;i<=num;i++) { setmap1(data[i].t,data[i].lx,data[i].ly,data[i].rx,data[i].ry); setmap2(data[i].t,data[i].lx,data[i].ly,data[i].rx,data[i].ry); } bool flag; while(1) { flag=0; for(i=2;i<=t;i++) { if(reset1(i)) flag=1; } for(i=t;i>=1;i--) { if(reset2(i)) flag=1; } if(!flag) break; } /*-------------------judge-------------------------------------*/ int count=0; flag=1; for(i=1;i<=t;i++) { if(len[i]==0) { flag=0; break; } else if(len[i]==1) { resfinal[++count]=res[i]; resfinal[count].t=i; } } printf("Robbery #%d:\n",casenum++); if(!flag) printf("The robber has escaped.\n\n"); else if(!count) printf("Nothing known.\n\n"); else { for(i=1;i<=count;i++) printf("Time step %d: The robber has been at %d,%d.\n",resfinal[i].t,resfinal[i].x,resfinal[i].y); printf("\n"); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator