pku 2623 Crashing Robots 第一周训练——模拟

http://poj.org/problem?id=2632

唉。。做模拟题一定要细心啊。才开始自己吧题意读错了,以为向左右转后还要走呢。调了很长时间还是没有过样例,最后又看了一遍题目才发现,原来是原地打转。悲剧啊。

还有就是对于tagp[a].mark的判断,if 必须配有els否则上一步对mark的改变会影响到下一步的处理。唉。。。这样的小错误在模拟题中是很难检查的。。唉。。费劲啊。

View Code
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 10007
using namespace std;
int flag;
struct node
{
int x,y;
char mark[2];
}tagp[maxn];
int nb,mb;
int iscrash(int a)
{
for (int i = 1; i <= nb; ++i)
{
if ((i != a) && (tagp[a].x == tagp[i].x) && (tagp[a].y == tagp[i].y))
return i;
}
return 0;
}
int main()
{
//freopen("d.txt","r",stdin);
int n,m,i,a,len;
char s[2];
int t,bpos,cpos;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
scanf("%d%d",&nb,&mb);
flag = 0;
memset(tagp,0,sizeof(tagp));
for (i = 1;i <= nb; ++i)
scanf("%d %d %s",&tagp[i].x,&tagp[i].y,tagp[i].mark);
while (mb--)
{
scanf("%d%s%d",&a,s,&len);
if (!flag)
{
if (tagp[a].mark[0] == 'N')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'W';
else if (len == 2)
tagp[a].mark[0] = 'S';
else if (len == 3)
tagp[a].mark[0] = 'E';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'E';
else if (len == 2)
tagp[a].mark[0] = 'S';
else if (len == 3)
tagp[a].mark[0] = 'W';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].y++;
if (tagp[a].y > m)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}
}
}
else if (tagp[a].mark[0] == 'S')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'E';
else if (len == 2)
tagp[a].mark[0] = 'N';
else if (len == 3)
tagp[a].mark[0] = 'W';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'W';
else if (len == 2)
tagp[a].mark[0] = 'N';
else if (len == 3)
tagp[a].mark[0] = 'E';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].y--;
if (tagp[a].y <= 0)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}
}
}
else if (tagp[a].mark[0] == 'W')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'S';
else if (len == 2)
tagp[a].mark[0] = 'E';
else if (len == 3)
tagp[a].mark[0] = 'N';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'N';
else if (len == 2)
tagp[a].mark[0] = 'E';
else if (len == 3)
tagp[a].mark[0] = 'S';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].x--;
if (tagp[a].x <= 0)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}
}
}
else if (tagp[a].mark[0] == 'E')
{
if (s[0] == 'L')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'N';
else if (len == 2)
tagp[a].mark[0] = 'W';
else if (len == 3)
tagp[a].mark[0] = 'S';
}
if (s[0] == 'R')
{
len = len%4;
if (len == 1)
tagp[a].mark[0] = 'S';
else if (len == 2)
tagp[a].mark[0] = 'W';
else if (len == 3)
tagp[a].mark[0] = 'N';
}
if (s[0] == 'F')
{
for (i = 0; i < len; ++i)
{
tagp[a].x++;
if (tagp[a].x > n)
{
cpos = a;
flag = 1;break;
}
bpos = iscrash(a);
if (bpos)
{
flag = 2;
cpos = a;
break;
}
}

}
}
}
}
if (!flag) printf("OK\n");
else if (flag == 1) printf("Robot %d crashes into the wall\n",cpos);
else if (flag == 2) printf("Robot %d crashes into robot %d\n",cpos,bpos);
}
return 0;
}


 

posted @ 2012-02-25 22:08  E_star  阅读(312)  评论(0编辑  收藏  举报