标签:
根据输出的走法模拟输入.
#include<stdio.h> #include<iostream> #include<string.h> #include <stdlib.h> #include<math.h> #include<algorithm> using namespace std; const int N = 100005; int x[N],y[N]; char str[N]; int dir[][2] = {{1,0},{-1,0},{0,1},{0,-1}}; bool vis[505][505];a int main() { int tcase; scanf("%d",&tcase); printf("%d\n",tcase); while(tcase--) { scanf("%s",str); int len = strlen(str); int MAXX = -1,MINX = 99999,MAXY = -1,MINY = 99999; x[1] = 2,y[1] = 1; int _dir = 2,nextdir; int cnt = 1; for(int i=0; i<len; i++) { MAXX = max(MAXX,x[cnt]); MINX = min(MINX,x[cnt]); MAXY = max(MAXY,y[cnt]); MINY = min(MINY,y[cnt]); if(str[i]==‘F‘) { cnt++; x[cnt] = x[cnt-1]+dir[_dir][0]; y[cnt] = y[cnt-1]+dir[_dir][1]; } if(str[i]==‘R‘) { if(_dir==0) nextdir = 3; if(_dir==1) nextdir = 2; if(_dir==2) nextdir = 0; if(_dir==3) nextdir = 1; _dir = nextdir; cnt++; x[cnt] = x[cnt-1]+dir[_dir][0]; y[cnt] = y[cnt-1]+dir[_dir][1]; } if(str[i]==‘L‘) { if(_dir==0) nextdir = 2; if(_dir==1) nextdir = 3; if(_dir==2) nextdir = 1; if(_dir==3) nextdir = 0; _dir = nextdir; cnt++; x[cnt] = x[cnt-1]+dir[_dir][0]; y[cnt] = y[cnt-1]+dir[_dir][1]; } if(str[i]==‘B‘) { if(_dir==0) nextdir = 1; if(_dir==1) nextdir = 0; if(_dir==2) nextdir = 3; if(_dir==3) nextdir = 2; _dir = nextdir; cnt++; x[cnt] = x[cnt-1]+dir[_dir][0]; y[cnt] = y[cnt-1]+dir[_dir][1]; } } int n=MAXX+1,m=MAXY+1; memset(vis,false,sizeof(vis)); if(MINX<=1) { for(int i=1;i<=cnt;i++){ x[i] = x[i]+ 2 - MINX; vis[x[i]][y[i]] = true; } n = MAXX - MINX+3; }else{ for(int i=1;i<=cnt;i++){ vis[x[i]][y[i]] = true; } } printf("%d %d\n",n,m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(vis[i][j]) printf("."); else printf("#"); } printf("\n"); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/liyinggang/p/5803672.html