【题解】「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= ...
随机推荐
- MySQL全面瓦解11:子查询和组合查询
概述 子查询是SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询. 先做一下数据准备,这边建立三张表:班级.学生. ...
- linux 内核并发同步 2
信号量semaphore 信号量是一种允许进程进入睡眠的同步机制,信号量是一个计数器,支持两种原语即P 和V操作,也就是down 和up 操作, /* Please don't access any ...
- psycopg2模块安装问题
我的平台是win10(x64).python3.7,打算通过psycopg2模块来操作Greenplum数据库,我通过pip install psycopg2 安装了psycopg2模块,也提示安装成 ...
- MFC详解
MFC的消息响应机制详解: 1.MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,接下来详细讲解. 2.在讲解MFC的消息响应之 ...
- springboot升级导致文件上传自动配置/tmp目录问题解决
1,..\web\src\main\resources\spring\web-men-applicationContext.xml 保留原有的bean配置 <bean id="mult ...
- webug第四关:告诉你了flang是5位数
第四关:告诉你了flang是5位数 开始看到有点懵 于是不要脸的看源码 burp跑弱口令
- Python学习第三天 --- 分支、循环、条件、枚举
1.表达式: 表达式(Expression)是运算符(operator)和操作数(operand)所构成的序列. 2.表达式的优先级: 3.python的注释: #单行注释 ''' 多行注释 ''' ...
- (i春秋 Misc)ReCreators - CryMisc
[i春秋 Misc] [题目链接] i春秋 Misc ReCreators CryMisc ReCreators 下载得到一个文件.老规矩,放入010文本编辑器中查看: 文件头是: KDMV 不清楚. ...
- 【MathType教学】如何让括号内的内容居中
作为一款非常好用的公式编辑器,MathType它的功能十分强大,不仅包含了大量的数学符号,并且能和Office软件很好地兼容.但是有的时候打出来的公式可能不是自己想要的效果,这时我们就要用一些特别的办 ...
- 下载器Folx专业版有没有iTunes整合功能
对于使用Mac系统的用户来说,相信对iTunes都不陌生.Folx专业版提供的iTunes整合功能,能将下载的音频.电影等文件自动同步到iTunes. 该功能将会有助于用户的音频.视频整合,对于喜欢听 ...