/*
** POJ 2632 Crashing Robots
** Created by Rayn @@ 2014/04/16
** 坑爹的模拟题,脑壳不清晰的就要被坑惨了
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int MAX = 110;struct pos{int id, dir; /* N-0,E-1,S-2,W-3 */int x, y;
};pos rob[MAX];
int HaveRob[MAX][MAX];
int K, A, B, N, M;
int mov[4][2] = {{0, 1},{1, 0},{0, -1},{-1, 0}};int DirToNum(char ch)
{switch(ch){case 'N':return 0;case 'E':return 1;case 'S':return 2;case 'W':return 3;default:break;}return -1;
}
int CrashWall(int x, int y)
{if(x<=0 || x>A || y<=0 || y>B)return 1;return 0;
}
int main()
{char str[10], act[10];int num, rep;scanf("%d", &K);while(K--){memset(HaveRob, 0, sizeof(HaveRob));scanf("%d%d%d%d", &A, &B, &N, &M);for(int i=1; i<=N; ++i){scanf("%d %d %s", &rob[i].x, &rob[i].y, str);rob[i].dir = DirToNum(str[0]);rob[i].id = i;HaveRob[rob[i].x][rob[i].y] = i;}int first = 1, ok = 1, tx, ty;while(M--){scanf("%d %s %d", &num, act, &rep);if(!first)continue;while(rep--){if(act[0] == 'L'){rob[num].dir = (rob[num].dir + 3) % 4;}if(act[0] == 'R'){rob[num].dir = (rob[num].dir + 1) % 4;}if(act[0] == 'F'){tx = rob[num].x + mov[rob[num].dir][0];ty = rob[num].y + mov[rob[num].dir][1];if(CrashWall(tx, ty) && first){printf("Robot %d crashes into the wall\n", num);first = ok = 0;}if(HaveRob[tx][ty] && first){printf("Robot %d crashes into robot %d\n", num, HaveRob[tx][ty]);first = ok = 0;}HaveRob[rob[num].x][rob[num].y] = 0;rob[num].x = tx;rob[num].y = ty;HaveRob[rob[num].x][rob[num].y] = num;}}}if(ok)printf("OK\n");}return 0;
}
/*
** POJ 2688 Cleaning Robot
** Created by Rayn @@ 2014/05/07
** 好久没做搜索,又写错了dir方向数组
** 竖向是x坐标,横向是y坐标
*/
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int MAX = 15;int dir[4][2] = {{-1,0},{1,0},{0,1},{0,-1}};/* N,S,E,W */
int loop, step;
int maze[MAX][MAX], vis[MAX][MAX];void Init()
{memset(vis, 0, sizeof(vis));for(int i=0; i<MAX; ++i){for(int j=0; j<MAX; ++j){maze[i][j] = 5; //在地图外圈置为5,方便判断出界}}
}
int Trans(char ch)
{int dir = 5;switch(ch){case 'N':return 0;case 'S':return 1;case 'E':return 2;case 'W':return 3;default:break;}return dir;
}
void DFS(int x, int y, int s)
{if(maze[x][y] == 5){step = s;loop = -1;return ;}if(vis[x][y] != 0){step = vis[x][y] - 1;loop = s - step;return ;}vis[x][y] = s + 1;int tx = x + dir[maze[x][y]][0];int ty = y + dir[maze[x][y]][1];DFS(tx, ty, vis[x][y]);
}
int main()
{
#ifdef _Raynfreopen("in.txt", "r",stdin);
#endifint h, w, start;char tmp[15];while(scanf("%d%d%d", &h, &w, &start) != EOF){if(h==0 && w==0 && start==0)break;Init();for(int i=1; i<=h; ++i){scanf("%s", tmp);for(int j=0; j<w; ++j){maze[i][j+1] = Trans(tmp[j]);}}loop = 0;DFS(1, start, 0);if(loop == -1)printf("%d step(s) to exit\n", step);elseprintf("%d step(s) before a loop of %d step(s)\n", step, loop);}return 0;
}

POJ 1573 POJ 2632(两道有趣的Robot)实例相关推荐

  1. 两道有趣的逻辑推理题

    海盗分金币 问题: 有5个海盗,按照等级从5到1排列.最大的海盗有权提议他们如何分享100枚金币.但其他人要对此表决,如果多数(所有人中的多数)反对,那他就会被杀死.他应该提出怎样的方案,既让自己拿到 ...

  2. POJ的题目分类(两个版本)

    版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...

  3. POJ -1573 Robot Motion

    题目链接:POJ 1573 Robot Motion 一个小模拟,非常easy,依照提示一步步走就是了 #include <iostream> #include <cstdio> ...

  4. 【POJ】POJ题目分类

    转自:http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期: 一.基本算法:      (1)枚举. (poj1753, ...

  5. 两道二分coming~

    第一道:poj 1905Expanding Rods 题意:两道墙(距离L)之间架一根棒子,棒子受热会变长,弯曲,长度变化满足公式( s=(1+n*C)*L),求的是弯曲的高度h. 首先来看这个图: ...

  6. 大一女生废话编程爆火!网友:有时间拍抖音不如刷多两道leetcode

    上一篇:为什么阿里巴巴要禁用 Executors 创建线程池 ? 杨净 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 她的日更作业,竟让网友直呼:中国计算机界的神! 短短两个星期的时间里,这个 ...

  7. 线段树区间染色 浮水法 学习小记 Poj 2777 + Poj 2528

    复习过的东西必须时常拿来练练,虽说都是水题.... Poj 2777 典型的区间染色问题,貌似我的写法为了不数组越界必须多开一倍的数组空间.....还没有想到解决方法,有机会参考一下别人的写法. Po ...

  8. BAT七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  9. IT人的“钱”景以及收入的两道坎

    虽然IT工作五花八门,而且年纪有老有少,但IT人的收入总体还是比较有规律的,很明显的可以看出有两道坎,分别是10W,和30W,当然,我说的是年薪,是RMB,不包含任何跟销售相关的提成,也就是纯打工者的 ...

最新文章

  1. 喜大普奔!GitHub官方文档推出中文版
  2. 一个用于分页的page类
  3. mongodb 对内存的严重占用以及解决方法
  4. [蛋蛋の涂鸦日记]02-致电通渠中心
  5. JAVA的Date类与Calendar类
  6. 《编译原理》学习笔记 ·001【第一章:总论】
  7. 黄聪:php实现关键词高亮
  8. Nicescroll用法
  9. 2017(第六届)国际智慧城市峰会暨智慧城市新科技博览会在沪召开
  10. Js常用40个页面效果
  11. 项目思维导图软件测试分析,在软件测试中使用思维导图技术
  12. 点集配准技术(ICP、RPM、KC、CPD)
  13. 耳机四根线的图解_type c数据线拆解及接线图文详解
  14. ERNIE-ViL: Knowledge Enhanced Vision-Language Representations Through Scene Graph
  15. 05-【gorm】GORM Model FindFirstWhere等查询函数的区别
  16. 2022机修钳工(高级)考试题库模拟考试平台操作
  17. Hibernate @Formula详解
  18. 鹅厂招人啦!限量内推码和面试直通卡!助你直拿Offer(内附岗位介绍)
  19. 如何提高接口测试覆盖率?
  20. 【智能制造】设备故障诊断基础知识:振动、噪声、温度、探伤

热门文章

  1. 【EventBus】发布-订阅模式 ( Android 中使用 发布-订阅模式 进行通信 )
  2. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存
  3. 【Java 注解】自定义注解 ( 注解解析 )
  4. 【错误记录】Tinker 热修复示例运行报错 ( Execution failed for task ‘:app:tinkerProcessD‘ . tinkerId is not set!!! )
  5. 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★
  6. 【嵌入式开发】ARM 代码搬移 ( ARM 启动流程 | 代码搬移 起点 终点 | 链接地址 | 汇编代码 )
  7. jeecms系统_自定义对象流程
  8. 《精通并发与Netty》学习笔记(13 - 解决TCP粘包拆包(一)概念及实例演示)
  9. [BZOJ1188/Luogu3185][HNOI2007]分裂游戏
  10. sloth——算法工程师标注数据的福音