玩具谜题(toy)

来源:noip2016 提高组 day1

[题目描述]

小南有一套可爱的玩具小人, 它们各有不同的职业。

有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:

(不知道大家有没有发现mengbierm,What that mean?)

这时singer告诉小南一个谜題: "眼镜藏在我左数第3个玩具小人的右数第1个玩具小人的左数第2个玩具小人那里。 "

小南发现, 这个谜题中玩具小人的朝向非常关键, 因为朝内和朝外的玩具小人的左右方向是相反的: 面朝圈内的玩具小人, 它的左边是顺时针方向, 右边是逆时针方向; 而面向圈外的玩具小人, 它的左边是逆时针方向, 右边是顺时针方向。

小南一边艰难地辨认着玩具小人, 一边数着:

singer朝内, 左数第3个是archer。

archer朝外,右数第1个是thinker。

thinker朝外, 左数第2个是writer。

所以眼镜藏在writer这里!

虽然成功找回了眼镜, 但小南并没有放心。 如果下次有更多的玩具小人藏他的眼镜, 或是谜題的长度更长, 他可能就无法找到眼镜了 。 所以小南希望你写程序帮他解决类似的谜題。 这样的谜題具体可以描述为:

有 n个玩具小人围成一圈, 已知它们的职业和朝向。现在第1个玩具小人告诉小南一个包含 m条指令的谜題, 其中第 z条指令形如"左数/右数第 s个玩具小人"。 你需要输出依次数完这些指令后,到达的玩具小人的职业。

[输入格式]

输入的第一行包含两个正整数 n,m, 表示玩具小人的个数和指令的条数。

接下来 n行, 每行包含一个整数和一个字符串, 以逆时针为顺序给出每个玩具小人的朝向和职业。其中0表示朝向圈内, 1表示朝向圈外。保证不会出现其他的数。字符串长度不超过10且仅由小写字母构成, 字符串不为空, 并且字符串两两不同。 整数和字符串之问用一个空格隔开。

接下来 m行,其中第 z行包含两个整数 a,s,表示第 z条指令。若 a= 0表示向左数 s个人;若a= 1 ,表示向右数 s个人。保证a不会出现其他的数 1≤ s<n 。

[输出格式]

输出一个字符串, 表示从第一个读入的小人开始, 依次数完 m条指令后到达的小人的职业。

[输入样例#1]

7 3

0 singer

0 reader

0 mengbier

1 thinker

1 archer

0 writer

1 mogician

0 3

1 1

0 2

[输出样例#1]

Writer

[输入样例#2]

10 10

1 C

0 r

0 P

1 d

1 e

1 m

1 t

1 y

1 u

0 V

1 7

1 1

1 4

0 5

0 3

0 1

1 6

1 2

0 8

0 4

[输出样例#2]

Y

[子任务]

[解法]

这道题放在提高组真够水的,这道题的描述比较清楚,只需模拟singer说的话即可。难点有二,其一是顺逆时针与小人面向与左右;其二是数数的方法(即现在所在哪个小人。解决这两点,拿这100分就游刃有余了。

对于第一个难点我们发现当面向里且向左数或面向外向右数为顺时针,面向外且向左数或面向内向右数为逆时针。即同号顺时针异号逆时针

对于第二个难点我可以找规律解决,文字不好描述,请看代码理解即可。

[代码(AC)]

Zjd同学:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<string>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. int now=;//表示现在位于哪个小人
  9. int n,m;
  10. struct s{
  11. int m;
  12. string job;
  13. }people[];
  14. void walk(int f,int step){
  15. if(people[now].m==f){//顺时针走
  16. step%=n;
  17. if(now>=step)now-=step;
  18. else {
  19. now=n-(step-now);
  20. }
  21. }
  22. else {//逆时针走
  23. step%=n;
  24. if((n--now)>=step)now+=step;
  25. else {
  26. now=step-(n--now)-;
  27. }
  28. }
  29. }
  30. int main(){
  31. freopen("toy.in","r",stdin);
  32. freopen("toy.out","w",stdout);
  33. scanf("%d%d",&n,&m);
  34. for(int i=;i<n;++i){
  35. scanf("%d ",&people[i].m);
  36. cin>>people[i].job;//string%s 不知为何有错,只好无脑cin
  37. }
  38. for(int i=;i<m;++i){
  39. int f;
  40. int step;
  41. scanf("%d %d",&f,&step);
  42. walk(f,step);
  43. }
  44. cout<<people[now].job;
  45. return ;
  46. }

Gzd同学(居然AC了):

  1. #include<iostream>
  2.  
  3. #include<iomanip>
  4.  
  5. #include<cmath>
  6.  
  7. #include<cstdio>
  8.  
  9. #include<cstring>
  10.  
  11. #include<string>
  12.  
  13. #include<algorithm>
  14.  
  15. using namespace std;
  16.  
  17. int n,m,b[],i=;
  18.  
  19. bool a[],a1[];
  20.  
  21. string s[];
  22.  
  23. int main()
  24.  
  25. {
  26.  
  27. freopen("toy.in","r",stdin);
  28.  
  29. freopen("toy.out","w",stdout);
  30.  
  31. cin>>n>>m;
  32.  
  33. for(i=;i<=n;i++)
  34.  
  35. {
  36.  
  37. cin>>a[i]>>s[i];
  38.  
  39. }
  40.  
  41. for(i=;i<=m;i++)
  42.  
  43. {
  44.  
  45. cin>>a1[i]>>b[i];
  46.  
  47. }
  48.  
  49. i=;
  50.  
  51. for(int j=;j<=m;j++)
  52.  
  53. {
  54.  
  55. if(a[i]==)
  56.  
  57. {
  58.  
  59. if(a1[j]==)
  60.  
  61. {
  62.  
  63. i-=b[j];
  64.  
  65. if(i<)
  66.  
  67. {
  68.  
  69. i=(n+)-(-i);
  70.  
  71. }
  72.  
  73. }
  74.  
  75. else
  76.  
  77. {
  78.  
  79. i+=b[j];
  80.  
  81. if(i>n)
  82.  
  83. {
  84.  
  85. i=+(i-n);
  86.  
  87. }
  88.  
  89. }
  90.  
  91. }
  92.  
  93. else
  94.  
  95. {
  96.  
  97. if(a1[j]==)
  98.  
  99. {
  100.  
  101. i+=b[j];
  102.  
  103. if(i>n)
  104.  
  105. {
  106.  
  107. i=+(i-n);
  108.  
  109. }
  110.  
  111. }
  112.  
  113. else
  114.  
  115. {
  116.  
  117. i-=b[j];
  118.  
  119. if(i<)
  120.  
  121. {
  122.  
  123. i=(n+)-(-i);
  124.  
  125. }
  126.  
  127. }
  128.  
  129. }
  130.  
  131. }
  132.  
  133. cout<<s[i];
  134.  
  135. return ;
  136.  
  137. }

2018-11-03 23:21:43

[题解]玩具谜题(toy)的更多相关文章

  1. [Noip2017][Day 1][T1]玩具谜题(toy.cpp)

    题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...

  2. Noip2016提高组 玩具谜题toy

    Day 1 T1 题目大意 一些naive的玩具小人把小南的眼镜藏起来,但小南有一份too simple的小纸条,告诉小南眼镜在第一个小人往哪数第几个的往哪数的第几个的往哪数第几个的往哪数的第几个的往 ...

  3. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP

    1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...

  4. 【bzoj1010】[HNOI2008]玩具装箱toy

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9281  Solved: 3719[Submit][St ...

  5. BZOJ 1010 [HNOI2008]玩具装箱toy

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7184  Solved: 2724[Submit][St ...

  6. bzoj1010: [HNOI2008]玩具装箱toy(DP+斜率优化)

    1010: [HNOI2008]玩具装箱toy 题目:传送门 题解: 很明显的一题动态规划... f[i]表示1~i的最小花费 那么方程也是显而易见的:f[i]=min(f[j]+(sum[i]-su ...

  7. NOIP201605玩具谜题-解题报告

    NOIP201605玩具谜题-解题报告                                                                         2019-11- ...

  8. NOIP 2016 玩具谜题

    洛谷 P1563 玩具谜题 洛谷传送门 JDOJ 3136: [NOIP2016]玩具谜题 D1 T1 JDOJ传送门 Description 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天 ...

  9. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

随机推荐

  1. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)

    前言 今天正式开始写代码了,之前铺垫了很多了,包括 6 篇基础文章,一篇正式环境搭建,就是为了今天做准备,想温习的小伙伴可以再看看<Vue 基础入门+详细的环境搭建>,内容很多,这里就暂时 ...

  2. BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.7.3)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo将百度语音SDK(其中一部分功能)和自定义的UI对话框封装到一个module中,便于后续的SDK版本更新以及调用. 本De ...

  3. MySQL系列--3.数据类型和连接查询

    1.存储引擎 数据创建,查询,更新和删除操作都是通过数据引擎来进行的.不同的存储引擎存储限制不同,支持不同的索引机制等. 查询数据库支持的存储引擎 MySQL 5.7.2支持的存储引擎有:InnoDB ...

  4. 利用SHA-1算法和RSA秘钥进行签名验签(带注释)

    背景介绍 1.SHA 安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1.其对长度不超过264二进制 ...

  5. sql学习笔记(三)—— 联表查询

    上篇写了一些sql查询的知识,这篇接着写一下有关联表查询的知识. 既然是联表查询,那肯定得多个表啊,所以,我们先创建一个教师表,表名为 teacher,并且向表中插入数据. 准备工作: 创建表语句: ...

  6. element-tree-grid(表格树)的使用

    表格树,element-tree-grid需要单独下载并再配合elementUi里el-table使用. 步骤:1.npm install element-tree-grid --save(下载ele ...

  7. vue项目中获取cdn域名插件

    import axios from 'axios' let CdnPath = {} CdnPath.install = function (Vue, options) { Vue.prototype ...

  8. 学习day01

    1.web C/S:Client Server 客户端 服务器 QQ,... B/S:Browser Server 浏览器 服务器 PC机:Personal Computer 个人电脑 2.HTML ...

  9. 通用HttpClientUtil工具类

    package com.*.utils; import java.io.IOException; import java.net.URI; import java.util.ArrayList; im ...

  10. MySQL:select command denied to user for table 'proc'案例

    使用EMS MySQL Manager Pro(3.4.0.1)连接MySQL 5.6.20时,报错:"SELECT command denied to user xxx@xxx.xxx.x ...