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玩具谜题-解题报告的更多相关文章

  1. UOJ260 【NOIP2016】玩具谜题

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  2. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  3. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  4. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  5. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  6. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  7. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  8. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  9. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

随机推荐

  1. mybatis入门百分百

    今天重新返回来看自己的mybatis,总结了一些更好入门的办法,下面用最简单的方法带领大家入门. 此处先引入类包的关系图片 1.构建一个==普通==maven项目 构建好之后向pom.xml添加一下依 ...

  2. Linux虚拟机中配置JDK环境变量(Ubuntu系统)

    首先通过Xshell中文件传输想你的虚拟机上传你的jdk,如图所示:(需要本机安装Xftp:链接: https://pan.baidu.com/s/1sWHmywZ2C6V2n4aa1FqqFg 提取 ...

  3. day 19作业

    目录 今日作业: 今日作业: 1.什么是对象?什么是类? 答:对象是特征与技能的集合体,类是一系列对象相同的特征与技能的结合体 2.绑定方法的有什么特点 答:由对象来调用称之为对象的绑定方法,不同的对 ...

  4. e课表项目第二次冲刺周期第一天

    昨天干了什么? 昨天与我们小组的成员商量了一个重大的决定,由于我们第一次冲刺周期的成果,就是我们决定我们要转型发展. 今天干了什么? 查阅相关的资料,我们正式决定要做一款学习的课程表APP,把简易作为 ...

  5. 计算几何基础算法几何C++实现

    This file is implementation of Common Common Computational Geometry Algorithms.Please please pay att ...

  6. eclipse 的使用

    eclipse 的官方下载:https://www.eclipse.org/downloads/ 安装时选择 :Eclipse  IDE for Java EE Developers 设置: 1. 编 ...

  7. .bash_profile does not exist

    localhost:test jerry$ open .bash_profile The file /Users/je/Desktop/test/.bash_profile does not exis ...

  8. SD卡学习笔记

    最近调试了SD卡,遇到了一些小问题,记录一下,分享一下. 1.    SD卡 卡槽旁边的一个小开关 我们平时见过的SD卡都是小的SD卡,可以放在手机上的.现在大多数的开发板上也是小的SD卡的卡槽,插入 ...

  9. c#之线程基础(一)

    可以认为线程是一个虚拟进程,用于独立运行一个特定的程序. 1.使用c#创建线程 using System; using System.Threading; //3 namespace MutiThre ...

  10. Python高级核心技术97讲 ☝☝☝

    Python高级核心技术97讲  ☝☝☝ Python高级核心技术97讲 系列教程 学习 教程 Python的标准整数类型是最通用的数字类型.在大多数32位机器上,标准整数类型的取值范围是-2**31 ...