玩具谜题(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同学:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int now=;//表示现在位于哪个小人
int n,m;
struct s{
int m;
string job;
}people[];
void walk(int f,int step){
if(people[now].m==f){//顺时针走
step%=n;
if(now>=step)now-=step;
else {
now=n-(step-now);
}
}
else {//逆时针走
step%=n;
if((n--now)>=step)now+=step;
else {
now=step-(n--now)-;
}
}
}
int main(){
freopen("toy.in","r",stdin);
freopen("toy.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<n;++i){
scanf("%d ",&people[i].m);
cin>>people[i].job;//string%s 不知为何有错,只好无脑cin
}
for(int i=;i<m;++i){
int f;
int step;
scanf("%d %d",&f,&step);
walk(f,step);
}
cout<<people[now].job;
return ;
}

Gzd同学(居然AC了):

 #include<iostream>

 #include<iomanip>

 #include<cmath>

 #include<cstdio>

 #include<cstring>

 #include<string>

 #include<algorithm>

 using namespace std;

 int n,m,b[],i=;

 bool a[],a1[];

 string s[];

 int main()

 {

     freopen("toy.in","r",stdin);

     freopen("toy.out","w",stdout);

     cin>>n>>m;

     for(i=;i<=n;i++)

     {

         cin>>a[i]>>s[i];

     }

     for(i=;i<=m;i++)

     {

         cin>>a1[i]>>b[i];

     }

     i=;

     for(int j=;j<=m;j++)

         {

             if(a[i]==)

             {

                 if(a1[j]==)

                 {

                     i-=b[j];

                     if(i<)

                     {

                         i=(n+)-(-i);

                     }

                 }

                 else

                 {

                     i+=b[j];

                     if(i>n)

                     {

                         i=+(i-n);

                     }

                 }

             }

             else

             {

                 if(a1[j]==)

                 {

                     i+=b[j];

                     if(i>n)

                     {

                         i=+(i-n);

                     }

                 }

                 else

                 {

                     i-=b[j];

                     if(i<)

                     {

                         i=(n+)-(-i);

                     }

                 }

             }

         }

     cout<<s[i];

     return ;

 }

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. redis 初识

    架构 sharding redis 集群是主从式架构,数据分片是根据hash slot(哈希槽来分布) 总共有16384个哈希槽,所以理论上来说,集群的最大节点(master) 数量是16384个.一 ...

  2. MySQL视图简介与操作

    1.准备工作 在MySQL数据库中创建两张表balance(余额表)和customer(客户表)并插入数据. create table customer( id int(10) primary key ...

  3. Window环境下配置MySQL 5.6的主从复制、备份恢复

    1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 navicat无法连接MySQL8解决方案 #修改加密规则 A ...

  4. 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...

  5. AppStore IPv6-only审核被拒原因分析及解决方案-a

    Apple关于IPV6规定 日前,苹果公司向开发者发出提醒,公司将会修改应用商店App Store的相关规定,所有IOS应用必须包含对IPv6-only标准的支持.据悉,该规定在6月1日生效,所有提交 ...

  6. Spring Boot 2.X 如何优雅的解决跨域问题?

    一.什么是源和跨域 源(origin)就是协议.域名和端口号.URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口全部相同,则表示他们同源.否则,只要协议.域名.端口有任何一个不同,就 ...

  7. 《JavaScript高级程序设计》笔记:DOM(十)

    Node类型 nodeType以下是一些重要的nodeType的取值:1: 元素element2: 属性attr3: 文本text8: 注释comments9: 文档document nodeName ...

  8. 2.5 Cesium视域分析的实现

    Cesium 视域分析 祝愿周末没事,技术继续分享交流,群685834990

  9. Fragment生命周期以及使用时的小问题

    前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...

  10. Android Studio教程07-Fragment的使用

    目录 1. Fragment是什么 1.1. 设计原理和实例 2. 创建fragment 2.1. fragment的生命周期 2.2 添加用户界面:融入到Activity中 3. 管理fragmen ...