Jury Jeopardy(反向模拟)

 

根据输出的走法模拟输入.

#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;
}

 

posted @ 2016-08-24 16:50  樱花庄的龙之介大人  阅读(164)  评论(0编辑  收藏  举报