Gym

来源:互联网 发布:java 实时语音聊天 编辑:程序博客网 时间:2024/06/07 08:12

https://vjudge.net/problem/Gym-101512J
按题意模拟。
给定一个机器人。开始方向为->.
给定四个单词代表前进方向,前进的时候头也会跟着变。从初始点出发最后一定会回来,问你输出他的路径。
(考虑到最后一定会回来,那么直接模拟就好了。其实回来不回来都无所谓。)
开的数组大一点。然后直接暴力。

#include<bits/stdc++.h>using namespace std;const int maxn=500;bool a[maxn][maxn];int ff;int fx[5][2]={{0,0},{0,1},{1,0},{0,-1},{-1,0}};//int fx[5][2]{{0,0},{0,1},{1,0},{0,-1},{-1,0}};int solve(string s){     ff=1;     int x=105;     int y=105;     a[x][y]=true;     for(int i=0;i<s.length();i++){         if(s[i]=='F'){             a[x+fx[ff][0]][y+fx[ff][1]]=true;             x+=fx[ff][0];             y+=fx[ff][1];             //cout<<fx[ff][0]<<" "<<fx[ff][1]<<endl;         }         else if(s[i]=='B'){             a[x-fx[ff][0]][y-fx[ff][1]]=true;             x-=fx[ff][0];             y-=fx[ff][1];             if(ff==1) ff=3;             else if(ff==2) ff=4;             else if(ff==3) ff=1;             else if(ff==4) ff=2;             //cout<<fx[ff][0]<<" "<<fx[ff][1]<<endl;         }         else if(s[i]=='R'){             if(ff==1) ff=2;             else if(ff==2) ff=3;             else if(ff==3) ff=4;             else if(ff==4) ff=1;             a[x+fx[ff][0]][y+fx[ff][1]]=true;              x+=fx[ff][0];              y+=fx[ff][1];          //cout<<fx[ff][0]<<" "<<fx[ff][1]<<endl;          }          else if(s[i]=='L'){                  if(ff==1) ff=4;             else if(ff==2) ff=1;             else if(ff==3) ff=2;             else if(ff==4) ff=3;             a[x+fx[ff][0]][y+fx[ff][1]]=true;              x+=fx[ff][0];              y+=fx[ff][1];              //cout<<fx[ff][0]<<" "<<fx[ff][1]<<endl;          }     }}bool ssx(int m){    for(int i=0;i<500;i++)        if(a[m][i]) return false;    return true;}bool ssy(int m){     for(int i=0;i<500;i++){         if(a[i][m]) return false;     }     return true;}int main(){   int m;   //freopen("F:\\eee\\ee.txt","w",stdout);   string s;    scanf("%d",&m);    int cas=1;    while(m--){         cin>>s;          memset(a,false,sizeof(a));          solve(s);          int lef,rig;          int low,high;          for(int i=105;i>=0;i--){              if(ssx(i))                {low=i;break;}          }          for(int i=105;i<500;i++){             if(ssx(i))                {high=i;break;}          }          for(int i=105;i>=0;i--){              if(ssy(i))                {lef=i;break;}          }          if(cas==1)            printf("%d\n",m+1);          for(int i=105;i<500;i++){              if(ssy(i))                 {rig=i;break;}          }     printf("%d %d\n",high-low+1,rig-lef);         for(int i=low;i<=high;i++){            for(int j=lef+1;j<=rig;j++){                if(a[i][j])                    printf(".");                else                    printf("#");            }            cout<<endl;         }         cas++;    }    return 0;}
原创粉丝点击