【题解】「UVA10116」Robot Motion
Simple Translation
让你模拟一个机器人行走的过程,如果机器人走入了一个循环,输出不是循环的长度和是循环的长度,如果最终走出来了,输出走的步数。
Solution
直接模拟即可,本题难度主要是判断循环,但是其实一点也不难。
首先定义一个 \(a\) 二维数组,然后将 \(a_{0, i}, a_{m+1, i}, a_{i, 0}, a_{i, n+1}\) 全部赋值为 \(1\),这是因为我们可以通过 \(a\) 数组来判断机器人走没走出地图。
循环模拟机器人走的每一步,并把走到这个地方所花费的步数记录在 \(a_{x, y}\),每当发现 \(a_{x, y}\) 走过时,即 \(a_{x, y} \neq 0\) 时,退出循环。
当机器人已经走出地图时,输出 \(a_{x, y}\)。
否则,输出未循环的步数和循环的步数,如何算这两个数呢?
我们发现总共走的步数是记录在 \(a_{x, y}\) 里面的,而我们走到的下一个格子就是循环的开始,所以只要求一下差值,即可得到。
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#define line cout << endl
using namespace std;
int a[13][13];
char mapp[11][11];
int m, n;
int main() {
while (cin >> n >> m) {
if (m == 0 && n == 0)
break;
memset (a, 0, sizeof(a));
for (int i = 0; i < m + 2; i++) {//将边缘全部变为 1 ,下同
a[0][i] = 1;
a[m + 1][i] = 1;
}
for (int i = 0; i < n + 2; i++) {
a[i][0] = 1;
a[i][n + 1] = 1;
}
int x = 1, y = 1;//记录当前坐标
cin >> x;
for (int j = 1; j <= n; j++) {
for (int i = 1; i <= m; i++) {
cin >> mapp[i][j];
}
}
int xx = x, yy = y;//记录下一个坐标
while (!a[xx][yy]) {//如果下一个格子没走过
a[xx][yy] = 1 + a[x][y];//记录步数
x = xx;//更新坐标
y = yy;
switch (mapp[xx][yy]) {
case 'N':
yy--;
break;
case 'S':
yy++;
break;
case 'W':
xx--;
break;
case 'E':
xx++;
break;
}
}
if (xx <= 0 || xx > m || yy <= 0 || yy > n) { //如果已经到达边缘
cout << a[x][y] << " step(s) to exit" << endl;
}
else {
int s = a[x][y] - (a[x][y] - a[xx][yy] + 1);//求未进如循环的步数
cout << s << " step(s) before a loop of " << a[x][y] - a[xx][yy] + 1 << " step(s)" << endl;
}
}
return 0;
}
【题解】「UVA10116」Robot Motion的更多相关文章
- 「ARC103D」Robot Arms「构造」
题意 给定\(n\)个点,你需要找到一个合适的\(m\)和\(d_1,d_2,...,d_m\),使得从原点出发每次向四个方向的某一个走\(d_i\)个单位,最终到达\((x_t, y_t)\).输出 ...
- 题解 「HDU6403」卡片游戏
link Description 桌面上摊开着一些卡牌,这是她平时很爱玩的一个游戏.如今卡牌还在,她却不在我身边.不知不觉,我翻开了卡牌,回忆起了当时一起玩卡牌的那段时间. 每张卡牌的正面与反面都各有 ...
- 题解 「SCOI2016」萌萌哒
link Description 一个长度为 $ n $ 的大数,用 $ S_1S_2S_3 \ldots S_n $表示,其中 $ S_i $ 表示数的第 $ i $ 位,$ S_1 $ 是数的最高 ...
- 题解 「SDOI2017」硬币游戏
题目传送门 Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强 ...
- 题解 「ZJOI2018」历史
题目传送门 Description 九条可怜是一个热爱阅读的女孩子. 这段时间,她看了一本非常有趣的小说,这本小说的架空世界引起了她的兴趣. 这个世界有 \(n\) 个城市,这 \(n\) 个城市被恰 ...
- 题解 「BZOJ3636」教义问答手册
题目传送门 Description 作为泉岭精神的缔造者.信奉者.捍卫者.传承者,Pear决定印制一些教义问答手册,以满足泉岭精神日益增多的信徒.Pear收集了一些有关的诗选.语录,其中部分内容摘录在 ...
- 题解「BZOJ4310」跳蚤
题目传送门 Description 现在有一个长度为 \(n\) 的字符串,将其划分为 \(k\) 段,使得这 \(k\) 段每一段的字典序最大子串中字典序最大的字符串字典序尽量小.求出这个字符串. ...
- 题解 「BZOJ2137」submultiple
题目传送门 题目大意 给出 \(M,k\) ,求出 \[\sum_{x|M}\sigma(x)^k \] 给出 \(P_i\),满足 \(n=\prod_{i=1}^{n}a_i^{P_i}\),其中 ...
- 题解 「BZOJ2178」圆的面积并
题目传送门 题目大意 给出 \(n\) 个圆,求它们并的面积大小. \(n\le 10^3\) 思路 如果您不会自适应辛普森法,请戳这里学习 其实我们发现,如果我们设 \(f(x)\) 表示 \(x= ...
随机推荐
- Andrew Ng 机器学习公开课 - 线性回归
我的机器学习系列从现在开始将会结合Andrew Ng老师与sklearn的api是实际应用相结合来写了. 吴恩达(1976-,英文名:Andrew Ng),华裔美国人,是斯坦福大学计算机科学系和电子工 ...
- python之 《进程之间数据交互和进程池》
1.进程q 进程呢就相当于一个房子,线程就相当于是房子里面在工作的人,那么一个房子的空间对于房子里面的人来说是共享的, 现在是多进程,也就是说有许多房子,很显然这个房子的空间只属于这个房子,不会属于其 ...
- iscsi一致性的测试验证方法
前言 如果使用场景是多路径iscsi,那么数据一致性的就需要去验证一致性,就需要一个比较通用的测试方法,最近在处理这块,记录下简单的测试方法 测试方法 写入数据 dd if=/dev/urandom ...
- iczer的vue-antd-admin项目,逐步平滑迁移mock的url
这个需求,在实战中蛮有用的.但没有看到网上太多文档,就自己hack了一个思路.供指正. 需求 在前后端分离的项目开发中,前后端的开发步骤和进度是不一致的.有时,前端为了不等待后端的API开发进度,会自 ...
- python request 请求https报错问题
旁边大佬让我重新写一个某XX监控脚本 需要请求https遇到了如下的问题 花了一下午解决这个问题... 害太菜,.... 遇到的问题: requests.post 发送https请求的时候 ...
- linux qt 5.12.6 编译mysql驱动
环境:ubuntu 18.4 x64.qt 5.12.6 问题:安装后是没有mysql的驱动的 解决过程: 各种搜索,先后安装了mysql mysql-client,mysql-server,和各种l ...
- OCR之前这些因素必须考虑到!
用久了ABBYY FineReader 14OCR文字识别软件,相信大家都知道图像质量对OCR质量有很大的影响,本文将给大家讲解下在识别图像之前,有哪些因素需要考虑到! 1.OCR语言 ABBYY F ...
- python菜鸟教程学习9:函数
函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.python提供了很多内建函数,但我们依然可以自己创建函数,叫做用户自定义函数. 自定义函数 你可以定义一个由自己想要功能 ...
- python定时执行详解
知识点 1. sched模块,准确的说,它是一个调度(延时处理机制),每次想要定时执行某任务都必须写入一个调度. (1)生成调度器:s = sched.scheduler(time.time,time ...
- docker中启动容器提示端口被占用
docker中启动容器提示端口被占用,但是 docker ps -a 查不到信息 1.查询端口被占用的id netstat -ntpl |grep 3306 2.杀掉该id kill -9 如果kil ...