标签:
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 8027 | Accepted: 3485 |
Description
Input
Output
Sample Input
4 5 4 2 2 1 1 E 5 4 W 1 F 7 2 F 7 5 4 2 4 1 1 E 5 4 W 1 F 3 2 F 1 1 L 1 1 F 3 5 4 2 2 1 1 E 5 4 W 1 L 96 1 F 2 5 4 2 3 1 1 E 5 4 W 1 F 4 1 L 1 1 F 20
Sample Output
Robot 1 crashes into the wall Robot 1 crashes into robot 2 OK Robot 1 crashes into robot 2
题意:在一个长A宽B的仓库活动,有n个机器人和m条操作,接下俩n行是机器是所在的位置以及面向的方向,接下来m行是进行的操作。判断是否撞墙、撞上其他机器人、不会碰撞。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <queue>
#include <set>
using namespace std;
int A,B;
int n;
struct robot {
int x, y;
int site;
} a[110];
int situation(int k)//判断是否发生碰撞
{
if(a[k].x <= 0 || a[k].x > A || a[k].y <= 0 || a[k].y > B) {
printf("Robot %d crashes into the wall\n",k);
return 1;
}
for(int i = 1; i <= n; i++) {
if(i == k)
continue;
if(a[k].x == a[i].x && a[k].y == a[i].y) {
printf("Robot %d crashes into robot %d\n",k,i);
return 1;
}
}
return 0;
}
int judge(char ch)//将方向数字化存储
{
if(ch == 'E')
return 0;
else if(ch == 'S')
return 1;
else if(ch == 'W')
return 2;
else if(ch == 'N')
return 3;
}
int main()
{
int T, m,i, j;
char ch;
int num, cnt;
int flag;
scanf("%d",&T);
while(T--) {
scanf("%d %d %d %d",&A, &B, &n, &m);
for(i = 1; i <= n; i++) {
scanf("%d %d %c",&a[i].x, &a[i].y, &ch);
a[i].site=judge(ch);
}
flag = 0;
for(i = 0; i < m; i++) {
scanf("%d %c %d",&num, &ch, &cnt);
if(ch == 'L') {
a[num].site = (a[num].site - cnt % 4) % 4;
if(a[num].site<0)
a[num].site+=4;
} else if(ch == 'R')
a[num].site = (a[num].site + cnt % 4) % 4;
else if(ch == 'F') {
if(!flag) {
for(j = 0; j < cnt; j++) {
if(a[num].site == 0)
a[num].x++;
else if(a[num].site == 1)
a[num].y--;
else if(a[num].site == 2)
a[num].x--;
else if(a[num].site == 3)
a[num].y++;
flag = situation (num);
if(flag)
break;
}
}
}
}
if(!flag)
printf("OK\n");
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/u013486414/article/details/42583639