洛谷P1563 [NOIP2016 提高组] 玩具谜题
题目链接:https://www.luogu.com.cn/problem/P1563
哈哈哈,这个题拿来一读是不是很吃惊hahaha,我刚开始读的时候吓了我一跳,这么长的题干,这么绕的题意,还有下面的子任务数据,好吓人,认为是一个难题。
其实,不必惊慌,这个题是一思路很清晰的模拟题。模拟一下就知道了。
首先,我们要开始中规中矩的输入n,m,在中规中矩的输入名字和朝向,题目要求我们输入一个整形数字和一个字符串,这个用结构体struct来解决即可。
大致过程如图:

下面开始模拟:
题目规定,
朝内——0,左——0;顺时针
朝内——0,右——1;逆时针
朝外——1,左——0;逆时针
朝外——1,右——1;顺时针。
为了方便理解,我们画一下图(画的很烂哦)

理解的差不多了吧(不理解可以自己动一下手哦),我们模拟完成后根据题目定义一个状态,根据题目所给出的朝向和转向,完成模拟运算,最后输出结果
注意:我们在这里采用位运算的异或法则,规定,逆时针是+,顺时针是-;
那么这个题就可以解决了。
代码及注意事项如下:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int t;//toward朝向
string name;//小人的名字
}p[100010];//要定义的大于10010哦,否则会RE
int x,y;
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
cin>>p[i].t>>p[i].name;//中规中矩的输入
}
int numz=0;//转向以及经过左右数的方位,我们首先从最初方位开始
for(int i=0;i<m;i++)
{
scanf("%d %d",&x,&y);
if(p[numz].t==0&&x==0)
{
numz=(numz-y+n)%n;//为什么要加n呢,因为如果要是数的个数过大,会造成负数的情况,所以说加上一个n就可以保证是正数了
}
else if(p[numz].t==0&&x==1)
{
numz=(numz+y)%n;//环形操作要%n,保证不会超限
}else if(p[numz].t==1&&x==0)
{
numz=(numz+y)%n;//同理
}else if(p[numz].t==1&&x==1)
{
numz=(numz+n-y)%n;//同理
}
}
cout<<p[numz].name<<endl;//输出最终方位
return 0;
}
洛谷P1563 [NOIP2016 提高组] 玩具谜题的更多相关文章
- Luogu P1563 [NOIp2016提高组]玩具谜题 | 模拟
题目链接 纯模拟题,没啥好说的,就是要判断地方有点多,一定要注意细节. #include<iostream> #include<cstdio> #include<fstr ...
- Noip2016提高组 玩具谜题toy
Day 1 T1 题目大意 一些naive的玩具小人把小南的眼镜藏起来,但小南有一份too simple的小纸条,告诉小南眼镜在第一个小人往哪数第几个的往哪数的第几个的往哪数第几个的往哪数的第几个的往 ...
- 洛谷 1850 NOIP2016提高组 换教室
[题解] 先用floyed处理出两点间的最短路. 设f[i][j][k]表示走到第i个教室,总共换了j次,当前换或者不换,期望的最小移动距离. 分情况讨论来转移即可. #include<cstd ...
- 洛谷P2827 [NOIP2016 提高组] 蚯蚓 (二叉堆/队列)
容易想到的是用二叉堆来解决,切断一条蚯蚓,其他的都要加上一个值,不妨用一个表示偏移量的delta. 1.取出最大的x,x+=delta: 2.算出切断后的两个新长度,都减去delta和q: 3.del ...
- 洛谷 P2678 & [NOIP2015提高组] 跳石头
题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...
- 洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)
题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个 ...
- 洛谷P1514 [NOIP2010提高组T4]引水入城
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...
- 洛谷P1084 [NOIP2012提高组Day2T3]疫情控制
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- 洛谷P1083 [NOIP2012提高组Day2T2]借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
随机推荐
- 【】JSON语法RFC4627
Network Working Group D. Crockford Request for Comments: 4627 JSON.org Category: Informational July ...
- IIS部署Python-django项目
1.安装CgiModule模块 首先,IIS要部署django项目,需要CgiModule模块的支持,所以首先我们要确认这个模块是否存在 打开IIS管理器: 我这里是存在的: 如果不存在,可以自行在控 ...
- SpringBoot 中拦截器的简介及使用方式
拦截器简介 拦截器通常通过动态代理的方式来执行. 拦截器的生命周期由IoC容器管理,可以通过注入等方式来获取其他Bean的实例,使用更方便. 拦截器配置使用方式 实现拦截器接口: import jav ...
- 字母 Letters
D. 字母 Letters 内存限制:256 MiB 时间限制:500 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给定两个长度相同且由大写英文字母组成的字符串 A 和 B,保证 ...
- Net 实现自定义Aop
引言 何为AOP,在软件开发中,总是听到这个AOP这个词语,但是何为AOP呢,AOP全称是Aspect Oriented Programming,中文译为面向切面编程,什么意思呢,即我们的应用程序在运 ...
- WAFW00F waf识别工具 源码学习
我实习工作的第一个任务根据已有的java waf识别工具 实现了一个python的waf识别工具 代码结构非常乱 仅仅达到了能用的水平. 顶头svp推荐这个项目当时我已经写好了开始用了自己的 稍微看了 ...
- 【reverse】逆向5 标志寄存器
[reverse]逆向5 标志寄存器 1.引言 通过一个creak.exe文件的爆破,引出现阶段需要学习的知识 2.标志寄存器 标志寄存器有上图这么多个 记住这几个寄存器的位置和名称 下面是6个状态标 ...
- manjaro20默认关闭蓝牙
用于节电. https://gist.github.com/0xfe11/d0874b7d31cf649616fa9d816571ab3c 推荐执行 # Stop and disable the bl ...
- redis实现简易在线聊天室
redis_flask简易聊天室 项目构建 这时一个基于Redis数据库的简单小项目,使用redis缓存数据,并通过flask部署到浏览器,运行截图如下: 输入名字后,就可以登陆到聊天室,主要包括三个 ...
- vue学习14-自定义组件添加属性
<!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <meta http ...