Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
一次AC——第一次贴代码。好规矩的模拟。。。今天服务器特别忙。#include <iostream> using namespace std; struct Location { int X; int Y; char Face; }; Location* loc; int K; int A, B, N, M; #define OK -2 #define WALL_CRASH -1 inline int robot_crash_detect(int m, int n) { for (int i = 0; i < N; ++i) { if (loc[i].X == m && loc[i].Y == n) return i; } return OK; } inline void turn_left(const int id) { switch (loc[id].Face) { case 'N': loc[id].Face = 'W'; break; case 'W': loc[id].Face = 'S'; break; case 'S': loc[id].Face = 'E'; break; case 'E': loc[id].Face = 'N'; break; } } inline void turn_right(const int id) { switch (loc[id].Face) { case 'N': loc[id].Face = 'E'; break; case 'W': loc[id].Face = 'N'; break; case 'S': loc[id].Face = 'W'; break; case 'E': loc[id].Face = 'S'; break; } } int one_step_forward(const int id) { int target_x, target_y; switch (loc[id].Face) { case 'N': target_x = loc[id].X; target_y = loc[id].Y + 1; if (target_y == B + 1) return WALL_CRASH; break; case 'W': target_x = loc[id].X - 1; target_y = loc[id].Y; if (target_x == 0) return WALL_CRASH; break; case 'S': target_x = loc[id].X; target_y = loc[id].Y - 1; if (target_y == 0) return WALL_CRASH; break; case 'E': target_x = loc[id].X + 1; target_y = loc[id].Y; if (target_x == A + 1) return WALL_CRASH; break; } int detect = robot_crash_detect(target_x, target_y); if (detect != OK) return detect; loc[id].X = target_x; loc[id].Y = target_y; return OK; } int main() { cin >> K; while (K--) { cin >> A >> B >> N >> M; loc = new Location[N]; for (int i = 0; i < N; ++i) cin >> loc[i].X >> loc[i].Y >> loc[i].Face; bool flag = true; for (int i = 0; i < M; ++i) { int id, step; char direc; cin >> id >> direc >> step; if (flag) { --id; if (direc == 'L') { while (step--) turn_left(id); } else if (direc == 'R') { while (step--) turn_right(id); } else { for (int t = 0; t < step; ++t) { int temp = one_step_forward(id); if (temp != OK) { if (temp == WALL_CRASH) cout << "Robot " << id + 1 << " crashes into the wall" << endl; else cout << "Robot " << id + 1 << " crashes into robot " << temp + 1 << endl; flag = false; break; } } } } } if (flag) cout << "OK" << endl; delete[] loc; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator