|
Posted on 2010-02-06 03:59 Uriel 阅读(299) 评论(0) 编辑 收藏 引用 所属分类: POJ 、 模拟
其实是个简单的模拟,不过做的人很少。。莫非是因为题目长?。。 跟着队长的脚步A此题。。刚想交PKU挂了。。去百练交之。。结果WA四次。。 题目倒没什么trick,WA都是自己不细心。。 总结下要注意的:1.不要出界; 2.case后空行; 3*,+的使用; 队长3000+B,我去掉注释5000+B。。PF啊。。 我的ws代码。。懒得简化了。。
/**//*Problem: 2122 User: Uriel Memory: 176K Time: 0MS Language: C++ Result: Accepted*/ #include<stdio.h> #include<stdlib.h> #include<algorithm> using namespace std;
int X,Y,x,y,xx,yy; char pic[100][100],str[100],text[100];
bool ok(int a,int b) { if(a>0 && a<=X && b>0 && b<=Y)return true; return false; }
int main() { int i,j,a,b,c,d; while(scanf("%d %d",&Y,&X),X,Y) { for(i=1;i<=X;i++) { for(j=1;j<=Y;j++) { pic[i][j]=' '; } } for(i=1;i<=Y;i++) { pic[0][i]='-'; pic[X+1][i]='-'; } for(i=1;i<=X;i++) { pic[i][0]='|'; pic[i][Y+1]='|'; } pic[0][0]='+'; pic[0][Y+1]='+'; pic[X+1][0]='+'; pic[X+1][Y+1]='+'; while(1) { getchar(); scanf("%s",str); if(strcmp(str,"PRINT")==0)break; else if(strcmp(str,"POINT")==0) { scanf("%d %d",&y,&x); if(pic[x][y]=='o'); else if(pic[x][y]!=' ' && ok(x,y))pic[x][y]='*'; else if(ok(x,y)) pic[x][y]='o'; } else if(strcmp(str,"CLEAR")==0) { scanf("%d %d %d %d",&a,&b,&c,&d); x=min(b,d); xx=max(b,d); y=min(a,c); yy=max(a,c); for(i=x;i<=xx;i++) { for(j=y;j<=yy;j++) { if(ok(i,j))pic[i][j]=' '; } } } else if(strcmp(str,"LINE")==0) { scanf("%d %d %d %d",&a,&b,&c,&d); if(a==c)//----------------------------------vertical { y=min(b,d); yy=max(b,d); for(i=y;i<=yy;i++) { if(ok(i,a)) { if(pic[i][a]=='-')pic[i][a]='+'; else if(pic[i][a]=='|' || pic[i][a]=='+'); else if(pic[i][a]!=' ')pic[i][a]='*'; else pic[i][a]='|'; } } } else if(b==d)//----------------------------------horizonal { x=min(a,c); xx=max(a,c);; for(i=x;i<=xx;i++) { if(ok(b,i)) { if(pic[b][i]=='|')pic[b][i]='+'; else if(pic[b][i]=='-' || pic[b][i]=='+'); else if(pic[b][i]!=' ')pic[b][i]='*'; else pic[b][i]='-'; } } } else if((a<c && b<d) || (a>c && b>d))//---------'\' { x=min(b,d); xx=max(b,d); y=min(a,c); yy=max(a,c); j=y; for(i=x;i<=xx;i++,j++) { if(ok(i,j)) { if(pic[i][j]=='/')pic[i][j]='x'; else if(pic[i][j]=='\\' || pic[i][j]=='x'); else if(pic[i][j]!=' ')pic[i][j]='*'; else pic[i][j]='\\'; } } } else//------------------------------------------'/' { x=min(b,d); xx=max(b,d); y=min(a,c); yy=max(a,c); j=yy; for(i=x;i<=xx;i++,j--) { if(ok(i,j)) { if(pic[i][j]=='\\')pic[i][j]='x'; else if(pic[i][j]=='/' || pic[i][j]=='x'); else if(pic[i][j]!=' ')pic[i][j]='*'; else pic[i][j]='/'; } } } } else if(strcmp(str,"TEXT")==0) { scanf("%d %d",&y,&x); getchar(); scanf("%s",text); for(i=y;i<strlen(text)+y;i++) { if(ok(x,i)) { if(pic[x][i]==' ' || pic[x][i]==text[i-y])pic[x][i]=text[i-y]; else pic[x][i]='*'; } } } } for(i=0;i<=X+1;i++) { for(j=0;j<=Y+1;j++) { printf("%c",pic[i][j]); } printf("\n"); } printf("\n"); } // system("PAUSE"); return 0; }
|