您的位置:首页 > 其它

poj 2632 Crashing Robots

2011-07-22 22:56 330 查看
#include<iostream>            //简单模拟题,千万要注意所给表格的x,y轴表示法与一般的相反
using namespace std;
char ch,action;
int pos[100000][2],dir[100000],vis[102][102];
int k,a,b,x,y,n,m,d,robot,repeat;

int main()
{
cin>>k;
while(k--)
{
cin>>a>>b>>n>>m;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;++i)
{
cin>>pos[i][0]>>pos[i][1]>>ch;
vis[pos[i][0]][pos[i][1]]=i;
if(ch=='N')
dir[i]=1;
else if(ch=='W')
dir[i]=2;
else if(ch=='S')
dir[i]=3;
else if(ch=='E')
dir[i]=4;
}
int tag=0;
while(m--)
{
cin>>robot>>action>>repeat;
if(tag)
continue;
int xx=pos[robot][0],yy=pos[robot][1];

if(action=='F')
{
vis[xx][yy]=0;

if(!tag&&dir[robot]==1)
{
for(int j=yy+1;!tag&&j<=yy+repeat;++j)
if(j>b)
printf("Robot %d crashes into the wall\n",robot),tag=1;
else if(vis[xx][j]!=0)
printf("Robot %d crashes into robot %d\n",robot,vis[xx][j]),tag=1;
if(!tag)
vis[xx][yy+repeat]=robot,pos[robot][0]=xx,pos[robot][1]=yy+repeat;
}
else if(!tag&&dir[robot]==3)
{
for(int j=yy-1;!tag&&j>=yy-repeat;--j)
if(j<1)
printf("Robot %d crashes into the wall\n",robot),tag=1;
else if(vis[xx][j]!=0)
printf("Robot %d crashes into robot %d\n",robot,vis[xx][j]),tag=1;
if(!tag)
vis[xx][yy-repeat]=robot,pos[robot][0]=xx,pos[robot][1]=yy-repeat;
}
else if(!tag&&dir[robot]==2)
{
for(int i=xx-1;!tag&&i>=xx-repeat;--i)
if(i<1)
printf("Robot %d crashes into the wall\n",robot),tag=1;
else if(vis[i][yy]!=0)
printf("Robot %d crashes into robot %d\n",robot,vis[i][yy]),tag=1;
if(!tag)
vis[xx-repeat][yy]=robot,pos[robot][0]=xx-repeat,pos[robot][1]=yy;
}
else if(!tag&&dir[robot]==4)
{
for(int i=xx+1;!tag&&i<=xx+repeat;++i)
if(i>a)
printf("Robot %d crashes into the wall\n",robot),tag=1;
else if(vis[i][yy]!=0)
printf("Robot %d crashes into robot %d\n",robot,vis[i][yy]),tag=1;
if(!tag)
vis[xx+repeat][yy]=robot,pos[robot][0]=xx+repeat,pos[robot][1]=yy;
}
}
else
{
repeat%=4;
if(action=='R')
{
dir[robot]=dir[robot]-repeat;
if(dir[robot]<1)
dir[robot]+=4;
}
else if(action=='L')
{
dir[robot]=dir[robot]+repeat;
if(dir[robot]>4)
dir[robot]-=4;
}
}
}
if(tag==0)
printf("OK\n");
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: