[POJ]poj2632(模拟)

题意:模拟

模拟就行

#include<iostream>
#include<cstdio>
#include<stack>

using namespace std;

const int N=1e2+7;

struct robot{
    int id,x,y,to;
};

const int dx[4]={0,1,0,-1};
const int dy[4]={1,0,-1,0};

int T,n,m,A,B,flag;

int map[N][N];

robot rbt[N];

void init(){
    for(int i=0;i<=B+1;i++)map[0][i]=map[A+1][i]=0;
    for(int i=0;i<=A+1;i++)map[i][0]=map[i][B+1]=0;
    for(int i=1;i<=n;i++)map[rbt[i].x][rbt[i].y]=0;
    flag=0;
    
    cin>>A>>B>>n>>m;
    
    for(int i=0;i<=B+1;i++)map[0][i]=map[A+1][i]=n+1;
    for(int i=0;i<=A+1;i++)map[i][0]=map[i][B+1]=n+1;
    for(int i=1;i<=n;i++){
        char f[3];
        cin>>rbt[i].x>>rbt[i].y>>f;
        if(f[0]=='N')rbt[i].to=0;
        if(f[0]=='E')rbt[i].to=1;
        if(f[0]=='S')rbt[i].to=2;
        if(f[0]=='W')rbt[i].to=3;
        map[rbt[i].x][rbt[i].y]=i;
    }
}

int main(){
    cin>>T;
    while(T--){
         
        init();
         
        for(int i=1;i<=m;i++){
            int num,rep;
            char f[3];
            cin>>num>>f>>rep;
            if(flag)continue;
            
            if(f[0]=='R'){
                rbt[num].to=(rbt[num].to+rep)%4;
            }
            
            if(f[0]=='L'){
                rbt[num].to=(rbt[num].to-rep+4000)%4;
            }
            
            if(f[0]=='F'){
                for(int i=1;i<=rep;i++){
                
                int nx=dx[rbt[num].to]+rbt[num].x;
                int ny=dy[rbt[num].to]+rbt[num].y;
                if(map[nx][ny]){
                    if(map[nx][ny]==n+1){
                        printf("Robot %d crashes into the wall\n",num);
                        flag=1;
                        break;
                    }
                    else {
                        printf("Robot %d crashes into robot %d\n",num,map[nx][ny]);
                        flag=1;
                        break;
                    }
                }
                else {
                    map[rbt[num].x][rbt[num].y]=0;
                    map[nx][ny]=num;
                    rbt[num].x=nx;
                    rbt[num].y=ny;
                }
                }
            }
        }
        if(!flag)printf("OK\n");
    } 
    
}

 

posted on 2019-03-12 17:45  枫棠  阅读(127)  评论(0编辑  收藏  举报

导航