题目背景

NOIP2016 提高组 D1T1

题目描述

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

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

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

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

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

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

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

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

所以眼镜藏在writer这里!

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

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

输入格式

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

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

接下来 m 行,其中第 i 行包含两个整数 ​,​,表示第 i 条指令。若 ​=0,表示向左数 ​个人;若  =1,表示向右数 个人。 保证  ​ 不会出现其他的数,1 ≤  ​< 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

说明/提示

每个测试点的数据规模及特点如下表:

思路:

模拟,首先定义一个结构体,然后分面向圈内,面向圈外两种情况

代码:

#include<stdio.h>
#include<math.h>struct toy{int face; char occupation[11];
}arr[100005];
int main()
{int n,m,dir,num,a=0,cnt=0,i,j;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d%s",&arr[i].face,arr[i].occupation);for(i=0;i<m;i++){scanf("%d%d",&dir,&num);cnt++;j = a;if(cnt==1){if(arr[j].face == 0){if(dir == 0)//圈内 a = abs(n - num) % n;//顺时针 elsea = num % n;//逆时针 }else{if(dir == 1)//圈外 a = abs(n - num) % n;//顺时针 elsea = num % n;//逆时针 }         }else{if(arr[j].face == 0)//圈内 {if(dir == 0)//顺时针 a = abs(a - num + n) % n;elsea = (a + num) % n;//逆时针}else{if(dir == 1)//顺时针a = abs(a - num + n) % n;elsea = (a + num) % n;//逆时针}            }   }puts(arr[a].occupation);return 0;
}

代码改进:

#include<stdio.h>
#include<math.h>struct toy{int face; char occupation[11];
}arr[100005];int main()
{int n,m,dir,num,a=0,cnt=0,i,j;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d%s",&arr[i].face,arr[i].occupation);for(i=0;i<m;i++){scanf("%d%d",&dir,&num);cnt++;if(arr[a].face == 0){if(dir == 0)a = (a - num + n) % n;elsea = (a + num) % n;}else{if(dir == 1)a = (a - num + n) % n;elsea = (a + num) % n;}         }puts(arr[a].occupation);return 0;
}

做题过程中遇到的问题:

最近几次做题总是忘记写scanf("%d%d",&n,&m) 导致我运行的时候无法正常输入,每次都要调试半天,最后发现原来没有写这句代码......我恨!

注意数组长度,结构体数组长度要 >= 100000,字符数组长度要 >= 10

还有顺时针的时候,a-num要+n,abs(a-num)是不等于a-num+n的 (做题的时候以为abs(a-num)等价于a-num+n)

再一点,关于(a-num+n)%7 因为题目中明确说明了,​一定比n小,在这里就是num一定比n小,所以不用取绝对值

洛谷:玩具谜题,C语言相关推荐

  1. 洛谷刷题C语言:潇湘の雨、分糖果、Addition、Ljeto、TRI

    记录洛谷刷题C语言QAQ 「PMOI-0」潇湘の雨 题目背景 (原 LZOI-1,改名已经 PMOI 成员同意) lhm-01 题目描述 言琢დ 在一个 2n×2n2n \times 2n2n×2n ...

  2. 洛谷刷题C语言:Bold、饱食、公平の意、DOM、

    记录洛谷刷题C语言qaq [COCI2020-2021#6] Bold 题目描述 Paula 给 Daniel 写了一封信,她需要加粗文本的字体,以便视力恶化的 Daniel 阅读. 信可以用 . 和 ...

  3. 洛谷刷题C语言:陶瓷项链、Cow Gymnastics B、Where Am I? B、Hello, 2020!、SIR 模型

    记录洛谷刷题C语言 一.[NOI2000] 瓷片项链 题目描述 原始部落用一种稀有的泥土烧制直径相同的圆瓷片并串成项链,串的时候沿瓷片的直径方向顺次连接,瓷片之间没有空隙也不重叠,一条项链至少由一个瓷 ...

  4. 洛谷刷题C语言:切蛋糕、概率、Bridž、NOTE、DOMINO

    记录洛谷刷题C语言qaq [NOI Online 2021 入门组] 切蛋糕 题目描述 Alice.Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕. 三个人的需求量分别为 ...

  5. 洛谷刷题C语言:Physics Problem、PARKING、Trol、信息学竞赛、POT

    记录洛谷刷题C语言 「dWoi R1」Physics Problem 题目背景 面对白板上的物理题,王马陷入了沉思 -- 题目描述 有 nnn 个状态,编号为 111 到 nnn.这 nnn 个状态之 ...

  6. 洛谷刷题C语言:Fergusonball Ratings、Don‘t Mozheng. /oh、gcd.、幻想乡扑克游戏、PMTD

    记录洛谷刷题C语言qaq [CCC2022 J2] Fergusonball Ratings 题目描述 现在有一个球队需要你评价. 球队中的第 i i i 个人进了 a i a_i ai​ 个球,犯规 ...

  7. 洛谷刷题C语言:远古档案馆(Ancient Archive)、VOLIM、SAHOVNICA、Tuna、KRIŽALJKA

    记录洛谷刷题C语言qaq,都是些不优雅的代码 远古档案馆(Ancient Archive) 题目背景 为了揭开月光能量背后的秘密,你来到了地下的远古档案馆. 远古一族的秘密与遗忘的知识悉数贮藏于这片被 ...

  8. 洛谷刷题C语言:闰年判断、Apples、洛谷团队系统、肥胖问题、三位数排序

    记录洛谷刷题QAQ 一.[深基3.例3]闰年判断 题目描述 输入一个年份,判断这一年是否是闰年,如果是输出 111,否则输出 000. 输入格式 输入一个正整数 nnn,表示年份. 输出格式 输出一行 ...

  9. 洛谷 P1888 三角函数 C语言

    三角形最小边对应最小角, 因为三边满足勾股定理,即是直角三角形 所以 最小角的正弦值=最小边/最大边 #include<stdio.h>int main(){int a, b, c, t; ...

最新文章

  1. 简单两步,spring aop上手即用即会
  2. 【运筹学】线性规划 单纯形法 案例二 ( 第一次迭代 | 矩阵变换 | 检验数计算 | 最优解判定 | 入基变量 | 出基变量 )
  3. InstallShield自定义安装界面
  4. spring boot+shiro+vue前后端分离时,获取不到session
  5. c# 找出目录下的所有子目录_Linux操作系统文件目录
  6. allegro 16.6/17.4 中如何将实心焊盘显示为空心焊盘
  7. base64 不一致_这几项超好用的云开发扩展能力,别说你还不知道!
  8. C# .net 对图片操作
  9. SpringCloud工作笔记081---SpringCloud Hystrix Turbine(断路器聚合监控)的基本使用
  10. 计算机专业创新项目,计算机专业本科生的创新思维
  11. 【论文】本体匹配实体对齐知识融合入门论文推荐
  12. POJ 2778 DNA Sequence (Aho-Corasick 矩阵优化) - xgtao -
  13. linux如何切换到root用户
  14. Tatala 中文教程
  15. DSOframer 的简单介绍和资源整理(2015-09-02重新整理)
  16. Illustrator CS2入门与实战视频教程
  17. 清华大学四连冠,南科大获得最高性能奖!国际大学生超算竞赛SC21结果出炉
  18. 移除元素---2022/03/16
  19. JS_将汉字转换成汉语拼音JS版
  20. 掌握 SQL 这些核心知识点,出去吹牛逼再也不担心了

热门文章

  1. Anaconda3安装教程(详细)
  2. python将图像变成没有颜色_python将图片设置背景颜色修改为透明色
  3. selenium自动获取王者荣耀英雄海报并保存到本地
  4. html语言设置网页名称,HTML语言范例
  5. 快递对接京东,菜鸟,顺丰过程备忘录
  6. 专访新致云田奎:行业云服务的差异化发展 初创公司上云迫在眉睫
  7. javascript基础复习之函数,定时器,erval函数
  8. 网络准入控制产品发展
  9. mysqld,mysqld_safe,mysql.server,mysqladmin,mysql,service mysql的理解
  10. 华为p50官方首曝鸿蒙,华为P50,会是鸿蒙系统的首发手机吗?