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 |
贴一份代码#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAXM 105 struct robot { int x, y; char pos; }a[MAXM]; struct point { int s, t; }ans[5]; char s[2]; int p, q, n, m; int map[MAXM][MAXM], res, flag[MAXM]; char s1[150], s2[150]; void rotate(int aim, char act, int repeat) { int i; for(i = 1; i <= repeat; i++) { if(act == 'L') a[aim].pos = s1[a[aim].pos]; else a[aim].pos = s2[a[aim].pos]; } return; } void walk(int aim, int x, int y, int repeat) { if(x > n || x < 1 || y > m || y < 1) { ans[res].s = aim; ans[res++].t = 0; flag[aim] = 1; return; } else if(map[x][y] != 0 && flag[map[x][y]] == 0 && map[x][y] != aim) { ans[res].s = aim; ans[res++].t = map[x][y]; flag[aim] = 1; flag[map[x][y]] = 1; return; } else if(repeat == 0) { map[x][y] = aim; a[aim].x = x; a[aim].y = y; return; } else { if(a[aim].pos == 'E') walk(aim, x, y+1, repeat-1); else if(a[aim].pos == 'W') walk(aim, x, y-1, repeat-1); else if(a[aim].pos == 'N') walk(aim, x-1, y, repeat-1); else walk(aim, x+1, y, repeat-1); } return; } void position(int aim, char act, int repeat) { if(act == 'L' || act == 'R') { repeat %= 4; rotate(aim, act, repeat); } else { map[a[aim].x][a[aim].y] = 0; walk(aim, a[aim].x, a[aim].y, repeat); } return; } void init() { s1['E'] = 'N'; s1['N'] = 'W'; s1['W'] = 'S'; s1['S'] = 'E'; s2['E'] = 'S'; s2['S'] = 'W'; s2['W'] = 'N'; s2['N'] = 'E'; } void prit() { if(ans[0].t == 0) printf("Robot %d crashes into the wall\n", ans[0].s); else printf("Robot %d crashes into robot %d\n", ans[0].s, ans[0].t); } int main() { int t; cin >> t; while(t--) { int i; int aim, count; cin >> m >> n; cin >> p >> q; memset(map, 0, sizeof(map)); for(i = 1; i <= p; i++) { cin >> a[i].y >> a[i].x >> s; a[i].pos = s[0]; a[i].x = n-a[i].x+1; map[a[i].x][a[i].y] = i; } init(); res = 0; memset(flag, 0, sizeof(flag)); for(i = 1; i <= q; i++) { cin >> aim >> s >> count; if(res == 0) position(aim, s[0], count); } if(res == 0) cout << "OK" << endl; else prit(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator