POJ 2632 Crashing Robots
来源:互联网 发布:淘宝网军印铁锹 编辑:程序博客网 时间:2024/04/30 07:12
题目很简答就是一个大模拟啊,可是我却敲了整整两天啊、、、sad的是竟然还是错了啊,10000+的代码啊,死的心都有了啊,后来看到大神的代码简单明了啊,突然发现要学习的东东太多了啊!这些都是经验啊,我还在傻了吧唧的重复啊,他们直接很简单的就解决了啊,一定得好好的学习一下啊!这就是经验啊,哎。。菜鸟明显不给力啊!
这是我写的,错了啊。只能过掉样例,过不了discuss里面的数据啊、、、、、
虽然折腾了两天有点浪费时间,但是让我印象深刻啊,下次一定要注意啊,水题中成长啊、、、
#include <stdio.h>#include <string.h>struct p{ int x, y, f;} num[1010];struct q{ int id, tap, step;} order[110];int main(){ int t, n, m, a, b, i, flat; int dp[110][110]; char s; scanf("%d",&t); while(t--) { flat = 0; memset(dp , 0 , sizeof(dp)); scanf("%d %d",&a, &b); scanf("%d %d",&n, &m); for(i = 0; i < n; i++) { scanf("%d %d %c",&num[i].x, &num[i].y, &s); dp[num[i].y][num[i].x] = i+1; if(s == 'N') num[i].f = 1; else if(s == 'S') num[i].f = 2; else if(s == 'W') num[i].f = 3; else if(s == 'E') num[i].f = 4; } for(i = 0; i < m; i++) { scanf("%d %c %d",&order[i].id, &s, &order[i].step); if(s == 'L') order[i].tap = 1; else if(s == 'R') order[i].tap = 2; else if(s == 'F') order[i].tap = 3; } for(i = 0; i < m; i++) { if(order[i].tap == 1) { if(num[order[i].id-1].f == 1) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 1; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 4; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 2; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 3; } else if(num[order[i].id-1].f == 2) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 2; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 3; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 1; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 4; } else if(num[order[i].id-1].f == 3) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 3; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 2; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 4; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 1; } else if(num[order[i].id-1].f == 4) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 4; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 1; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 3; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 2; } } else if(order[i].tap == 2) { if(num[order[i].id-1].f == 1) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 1; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 3; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 2; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 4; } else if(num[order[i].id-1].f == 2) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 2; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 4; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 1; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 3; } else if(num[order[i].id-1].f == 3) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 3; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 1; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 4; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 2; } else if(num[order[i].id-1].f == 4) { if(order[i].step % 4 == 0) num[order[i].id-1].f = 4; else if(order[i].step % 4 == 1) num[order[i].id-1].f = 2; else if(order[i].step % 4 == 2) num[order[i].id-1].f = 3; else if(order[i].step % 4 == 3) num[order[i].id-1].f = 1; } } else if(order[i].tap == 3) { if(num[order[i].id-1].f == 1) { for(int j = 1; j <= order[i].step; j++) { if(num[order[i].id-1].x+j > b) { flat = 1; printf("Robot %d crashes into the wall\n",order[i].id); break; } if(dp[num[order[i].id-1].x+j][num[order[i].id-1].y] != 0) { flat = 1; printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x+j][num[order[i].id-1].y]); break; } } if(flat == 1) break; else { dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0; num[order[i].id-1].x += order[i].step; dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id; } } else if(num[order[i].id-1].f == 2) { for(int j = 1; j <= order[i].step; j++) { if(num[order[i].id-1].x-j < 0) { flat = 1; printf("Robot %d crashes into the wall\n",order[i].id); break; } if(dp[num[order[i].id-1].x-j][num[order[i].id-1].y] != 0) { flat = 1; printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x-j][num[order[i].id-1].y]); break; } } if(flat == 1) break; else { dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0; num[order[i].id-1].x -= order[i].step; dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id; } } else if(num[order[i].id-1].f == 3) { for(int j = 1; j <= order[i].step; j++) { if(num[order[i].id-1].x-j <= 0) { flat = 1; printf("Robot %d crashes into the wall\n",order[i].id); break; } if(dp[num[order[i].id-1].y-j][num[order[i].id-1].x] != 0) { flat = 1; printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].y][num[order[i].id-1].x-j]); break; } } if(flat == 1) break; else { dp[num[order[i].id-1].y][num[order[i].id-1].x] = 0; num[order[i].id-1].x -= order[i].step; dp[num[order[i].id-1].y][num[order[i].id-1].x] = order[i].id; } } else if(num[order[i].id-1].f == 4) { for(int j = 1; j <= order[i].step; j++) { if(num[order[i].id-1].y+j > a) { flat = 1; printf("Robot %d crashes into the wall\n",order[i].id); break; } if(dp[num[order[i].id-1].x][num[order[i].id-1].y+j] != 0) { flat = 1; printf("Robot %d crashes into robot %d\n",order[i].id, dp[num[order[i].id-1].x][num[order[i].id-1].y+j]); break; } } if(flat == 1) break; else { dp[num[order[i].id-1].x][num[order[i].id-1].y] = 0; num[order[i].id-1].y += order[i].step; dp[num[order[i].id-1].x][num[order[i].id-1].y] = order[i].id; } } } } if(flat == 0) printf("OK\n"); } return 0;}
这是跟大神学习的啊,这个可以AC的
#include <stdio.h>#include <string.h>#define MAX 105int dx[4] = {0, -1, 0, 1}, dy[4] = {1, 0, -1, 0};int a, b, n, m, map[MAX][MAX], sta[MAX][3];int dir(char c){ switch(c) { case 'N': return 0; case 'W': return 1; case 'S': return 2; default: return 3; }}int main(){ int T, i, j, x, y, suc; char ts[5]; scanf("%d", &T); while(T--) { memset(map, 0, sizeof(map)); scanf("%d%d%d%d", &a, &b, &n, &m); for(i = 1; i <= n; i++) { scanf("%d%d%s", &x, &y, ts); map[x][y] = i; sta[i][0] = x, sta[i][1] = y, sta[i][2] = dir(ts[0]); } suc = 1; while(m--) { scanf("%d%s%d", &i, ts, &j); while(j-- && suc) switch(ts[0]) { case 'L': sta[i][2] = (sta[i][2] + 1) % 4; break; case 'R': sta[i][2] = (sta[i][2] + 3) % 4; break; default: map[sta[i][0]][sta[i][1]] = 0; x = sta[i][0] += dx[sta[i][2]]; y = sta[i][1] += dy[sta[i][2]]; if(!x || x > a || !y || y > b) { printf("Robot %d crashes into the wall\n", i); suc = 0; } else if(map[x][y]) { printf("Robot %d crashes into robot %d\n", i, map[x][y]); suc = 0; } else map[x][y] = i; break; } } if(suc) printf("OK\n"); } return 0;}
- Poj 2632 Crashing Robots
- poj 2632 Crashing Robots
- poj 2632 Crashing Robots
- poj-2632-Crashing Robots
- POJ 2632 Crashing Robots
- POJ 2632 Crashing Robots
- POJ 2632 Crashing Robots
- POJ 2632 Crashing Robots
- POJ-2632-Crashing Robots
- POJ 2632 Crashing Robots
- POJ 2632 Crashing Robots
- POJ 2632 Crashing Robots
- poj 2632 Crashing Robots
- POJ 2632 Crashing Robots
- poj -2632 Crashing Robots
- poj 2632 Crashing Robots
- POJ 2632 Crashing Robots
- poj 2632 Crashing Robots
- Struts2使用Kindeditor4.0.3在线编辑器--上传图片、视频、FLASH、附件
- altium pcb advpcb.dll报错
- truncate大数据的删除,或者删除大数据列
- 九度 online judge 1601
- hud 2073
- POJ 2632 Crashing Robots
- mysql导出部分(指定)数据库表字段
- 如何在asp.net中如何在线播放视频文件
- QHash的使用
- 论坛,引用功能
- hdu 1250
- 成都创娱无限科技有限公司二度前来招聘人才
- WebView使用笔记 Android
- java.lang.OutOfMemoryError: Java heap space 解决方法