NOIP201605玩具谜题-解题报告
NOIP201605玩具谜题-解题报告
2019-11-07 14:14
Part 1原题:
小南有一套可爱的玩具小人,它们各有不同的职业。
有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。 如下图:

这时singer 告诉小南一个迷题:“眼镜藏在我左数第 3 个玩具小人的右数第 1 个玩具小人的左数第 2 个玩具小人里。 ”
小南发现,这个迷题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向。
小南一边艰难地辨认着玩具小人,一边数着:
“singer 朝内,左数第 3 个是archer。
“archer 朝外,右数第 1 个是thinker。
“thinker 朝外,左数第 2 个是writer。
“所以眼镜藏在writer 这里! ”
虽然成功找回了眼镜,但小南并没有放心。 如果下次有更多的玩具小人藏他的眼镜,或是迷题的长度更长,他可能就无法找到眼镜了。 所以小南希望你写程序帮他解决类似的迷题。这样的迷题具体可以描述为:
有 n 个玩具小人围成一圈,己知它们的职业和朝向。 现在第 1 个玩具小人告诉小 南一个包含 m 条指令的迷题,其中第 i 条指令形如“左数/右数第 si 个玩具小人”。 你需要输出依次数完这些指令后,到达的玩具小人的职业。
Part 2:思路
这道题目的关键是小人的朝向。
如果这些方向你都处理好了,那么就能AC了。
下面先粘一个超时代码:
#include<bits/stdc++.h>
using namespace std;
struct toy
{
int dir;
];
}a[];
int i,j;
int now;
int m,n;
int init()
{
,f=;
char c=getchar();
')
{
;
c=getchar();
}
')
{
x=x*+c-';
c=getchar();
}
return x*f;
}
int main()
{
n=init();
m=init();
;i<n;i++)
{
a[i].dir=init();
scanf("%s",&a[i].name);
}
int x,y;
now=;
;i<=m;i++)
{
x=init();
y=init();
&& x==) now=(now+n-y)%n;
&& x==) now=(now+y)%n;
&& x==) now=(now+y)%n;
&& x==) now=(now+n-y)%n;
}
printf("%s",&a[now].name);
;
}
这个代码之所以超时,是因为它的处理部分(line43-45)的处理效率过低,下面粘AC代码:
#include<bits/stdc++.h>//万能头文件,这里偷了个懒 : )
using namespace std;//对于bits/stdc++.h来说,这句话是必要的,但对于某些头文件比如stdio.h来说,这句话不能写
int main()//main函数
{
int n,m;//n个小人,m条线索
scanf("%d%d",&n,&m);//读入
];//这里的a[i]用来记录第i个小人的脸的朝向
][];//因为每个名字都是一个字符串,所以这里的b数组(串)要用二维的
;i<n;i++)//循环从1到n,循环输入每个小人
{
scanf("%d%s",&a[i],&b[i]);
}
];//这里的c数组用来记录每条线索的的距离,例如 1 3中的3
;i<m;i++)//循环每条线索
{
int t;//定义临时变量t,用来记录这条线索的行驶方向
cin>>t;//读入方向
cin>>c[i];//读入这条线索的距离
) c[i]*=-; //这里,如果方向是 ‘右’,则将它乘上-1,方便后面累加和统计
}
;//定义位置变量(position),初始设为0
;i<m;i++)//循环每条线索进行处理
{
) c[i]*=-;//如果小人方向是 ‘左’,则将它乘上-1,方便后面累计和统计
pos+=c[i];//对于每个线索,如果他的方向是左,那他的距离已经乘上-1了, 所以直接加上
) pos-=n;//如果他的越界方式是过于大,所以应该减去n,其功效类似于%n
) pos+=n;//如果他的越界方式是过于小,所以应该加上n,其功效类似于%n
}
cout<<b[pos];//输出当前位置上的小人的名字。
;
}
注释已经写上了,各位自己可以看。
NOIP201605玩具谜题-解题报告的更多相关文章
- UOJ260 【NOIP2016】玩具谜题
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
随机推荐
- opencv之为图像添加边界
我们经常会有对图像边缘做扩展的需求.比如 希望卷积后得到的矩阵大小不变 希望改变图像大小,但是不改变宽高比 opencv实现 opencv中使用copyMakeBorder()来完成这一功能 api ...
- [LeetCode] 822. Card Flipping Game
Description On a table are N cards, with a positive integer printed on the front and back of each ca ...
- 快学Scala 第九课 (伴生对象和枚举)
Scala没有静态方法和静态字段, 你可以用object这个语法结构来达到同样的目的. 对象的构造器只有在第一次被使用时才调用. 伴生对象apply方法: 类和它的伴生对象可以互相访问私有特性,他们必 ...
- MongoDB 学习笔记之 手动预先分片
手动预先分片: 目的:手动预先分片是为了防止未来chunk的移动,减少IO. sh.shardCollection("shop.users",{"userId" ...
- selenium + python + firefox 测试环境的搭建与配置
对于做UI自动化,如果是纯编写一段自动化测试程序,那么后续的维护成本会较高.这种情况下,借助 selenium 这款自动化系测试工具,辅助于自己编写部分脚本,将是个不错的选择.selenium 本身支 ...
- Cocos Creator一步一步实现重力球游戏
『 游戏玩法 』 通过手机陀螺仪,调整手机,让球从上一层的间隔中落到下一层,楼层会不断上涨,如果球碰到上方或者下方的火焰,游戏结束. 『 游戏预览 』 『 开发工具 』 1. CocosCreat ...
- java动手动脑和动手实验
动手动脑一: EnumTest.java: 程序代码: public class EnumTest { public static void main(String[] args) { Size s= ...
- centos7升级openssl、openssh常见问题及解决方法
升级至openssl 1.1.1版本 升级至openssh 8.0版本 openssl version -a 当前查看版本 一.安装telnet (以防升级失败,连不上服务器,建议弄) #查看是否 ...
- .net core 3.0 WPF中使用FolderBrowserDialog
前言 随着.net core 3.0 的发布,WPF 也可以在 core 平台上使用了.当前的 WPF 不支持跨平台,仅能够在 Windows 平台上使用.如果想体验 WPF 跨平台开发,可以访问开源 ...
- 蓝牙TWS耳机IBRT的原理初分析
最近在倒腾TWS对耳的一些东西,看到一些源码,发现一个新概念,IBRT没有搞清楚,抱着吾将上下而求索的态度,详细看了一些代码,查了一些资料,还是发现了不少有价值的信息的.至少,我突然感觉自己懂了一些什 ...