📄 pku2632.cpp
字号:
/*
Author:Sempr
Algorithm:模拟
Date:2006-05-02
*/
#include <stdio.h>
#include <string.h>
#define size 110
typedef struct
{
int x, y, d;
} Robot;
Robot rb[size];
int bd[size][size];
int A, B;
int M, N;
int X, Y, D;
char Dc;
int Dis[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};
int CalcD(char c)
{
if (c == 'E')
{
return 0;
}
if (c == 'N')
{
return 1;
}
if (c == 'W')
{
return 2;
}
if (c == 'S')
{
return 3;
}
}
int In(int x, int y)
{
return x > 0 && y > 0 && x <= A && y <= B;
}
void Solve()
{
int i, j, end;
int id, rep;
char action;
scanf("%d %d", &A, &B);
scanf("%d %d", &N, &M);
memset(bd, 0, sizeof(bd));
end = 0;
for (i = 1; i <= N; i++)
{
scanf("%d %d %c", &X, &Y, &Dc);
D = CalcD(Dc);
rb[i].x = X;
rb[i].y = Y;
rb[i].d = D;
bd[X][Y] = i;
}
for (i = 0; i < M; i++)
{
scanf("%d %c %d", &id, &action, &rep);
if (end)
{
continue;
}
if (action == 'L')
{
rb[id].d += rep;
rb[id].d %= 4;
}
else if (action == 'R')
{
rb[id].d += 3 * rep;
rb[id].d %= 4;
}
else
{
X = rb[id].x;
Y = rb[id].y;
D = rb[id].d;
for (j = 0; j < rep; j++)
{
X += Dis[D][0];
Y += Dis[D][1];
if (!In(X, Y))
{
end = 1;
printf("Robot %d crashes into the wall\n", id);
break;
}
if (bd[X][Y])
{
printf("Robot %d crashes into robot %d\n", id, bd[X][Y]);
end = 1;
break;
}
}
if (!end)
{
bd[rb[id].x][rb[id].y] = 0;
rb[id].x = X;
rb[id].y = Y;
bd[X][Y] = id;
}
}
}
if (!end)
{
printf("OK\n");
}
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
Solve();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -