0
点赞
收藏
分享

微信扫一扫

POJ 2632 Crashing Robots【模拟】


#include <iostream>

using namespace std;

#define debug(x) cout<<#x<<": "<<(x)<<endl;
#pragma warning(disable:4996)

int K, A, B, N, M;

int a[1002][1002];

struct rob {
int x, y;
int d;
// n 0 , e 1
};
rob rbs[1002];

int getind(char c) {
if (c == 'N') {
return 0;
}else if (c == 'E') {
return 1;
}else if (c == 'S') {
return 2;
}else if (c == 'W') {
return 3;
}
return -1;
}

int isok(rob& rb) {
if (rb.x <= 0 || rb.x >= A + 1
|| rb.y <= 0 || rb.y >= B + 1) {
return 0;
}
//debug(a[rb.y][rb.x])

if (a[rb.y][rb.x] > 0) {
return a[rb.y][rb.x];
}
return -1;
}

bool cal() {
cin >> A >> B;
cin >> N >> M;

for (int i = 1; i <= N; ++i) {
cin >> rbs[i].x;
cin >> rbs[i].y;
char d;
cin >> d;
rbs[i].d = getind(d);
a[rbs[i].y][rbs[i].x] = i;
}

bool isp = false;

for (int i = 1; i <= M; ++i) {

int rid,rp;
char ac;
cin >> rid >> ac >> rp;

rob& rb = rbs[rid];

if (isp) {
continue;
}

if (ac == 'L') {
rb.d += 3*rp;
rb.d %= 4;
}else if (ac == 'R') {
rb.d += 1*rp;
rb.d %= 4;
}else if (ac == 'F') {

// -1 OK,0 wall ,other rbs
for (int j = 0; j < rp; ++j) {

int ox = rb.x;
int oy = rb.y;

a[oy][ox] = -1;

if (rb.d == 0) {
rb.y += 1;
}
else if (rb.d == 1) {
rb.x += 1;
}
else if (rb.d == 2) {
rb.y -= 1;
}
else if (rb.d == 3) {
rb.x -= 1;
}

int iso = isok(rb);

if (iso >= 0) {
if (isp == false) {
if (iso == 0) {
cout << "Robot " << rid << " crashes into the wall" << endl;
}
else if (iso > 0) {
cout << "Robot " << rid << " crashes into robot " << iso << endl;
}
isp = true;
}
break;
}
else {
a[rb.y][rb.x] = rid;
}
}
}
}

if (!isp) {
cout << "OK" << endl;
}

return 0;
}

int main()
{
//freopen("../in2.txt","r",stdin);
cin >> K;
for (int i = 0; i < K; ++i) {
fill(a[0], a[0] + sizeof(a) / 4, -1);
cal();
}
}

POJ 2632 Crashing Robots【模拟】_模拟


举报

相关推荐

0 条评论