[poj]poj2632(模拟)

Posted xutianshu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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
",num);
                        flag=1;
                        break;
                    }
                    else {
                        printf("Robot %d crashes into robot %d
",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
");
    } 
    
} 
View Code

 

以上是关于[poj]poj2632(模拟)的主要内容,如果未能解决你的问题,请参考以下文章

poj2632 模拟

poj 2632 Crashing Robots模拟略坑~

Poj 2632

POJ 2632 -- Crashing Robots

POJ 刷题指南

老学长的TODOLIST