poj 2632 Crashing Robots

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

  

posted on 2011-07-22 22:56  sysu_mjc  阅读(135)  评论(0编辑  收藏  举报

导航