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. 序列标注(HMM/CRF)

    目录 简介 隐马尔可夫模型(HMM) 条件随机场(CRF) 马尔可夫随机场 条件随机场 条件随机场的特征函数 CRF与HMM的对比 维特比算法(Viterbi) 简介 序列标注(Sequence Ta ...

  2. Elasticsearch实战-磁盘IO被打满

    背景 事情是这样的.一天下午4点42分左右.业务反馈我开发的服务在测试环境出现问题,返回资源数据是0.查日志发现是ES访问超时.相当于数据库挂了.持续了20多分钟自己恢复.咨询了ES团队,最终得到下面 ...

  3. Shell之Glob和RE的区别

    目录 Shell之Glob和RE的区别 参考 Glob RE Shell之Glob和RE的区别

  4. js实现烟花效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Linux配置python

    文章出处  https://www.cnblogs.com/yhongji/p/9383857.html 我这里使用的时centos7-mini,centos系统本身默认安装有python2.x,版本 ...

  6. 基于.Net core3.0 开发的斗图小程序后端+斗图小程序

    为啥要写这么一个小程序? 作为互联网的原住民. 90后程序员的我,从高中开始发QQ小表情. 到之后的熊猫头,蘑菇头. 可以说表情包陪伴我从学校到社会,从青少年到中年.. 而且因为斗图厉害,还找到一个女 ...

  7. MyBatis拦截器自定义分页插件实现

    MyBaits是一个开源的优秀的持久层框架,SQL语句与代码分离,面向配置的编程,良好支持复杂数据映射,动态SQL;MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyB ...

  8. Html中解决点击 a 标签刷新的问题,实现点击时不刷新

    Html中解决点击 a 标签刷新的问题 我们可以在 <a href=""></a>中,将地址属性href设置为“#” 例如 <a href=" ...

  9. 高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染

    目录 一. 高性能动画 二. 像素渲染管线 基本渲染流程 回流和重绘 三. 旧软件渲染 渲染对象(RenderObject) 渲染层(RenderLayer) 四. 从canvas体会分层优势 不分层 ...

  10. Vue-CLI项目-vue-cookie与vue-cookies处理cookie

    08.31自我总结 Vue-CLI项目-vue-cookie与vue-cookies处理cookie vue-cookie 一.模块的安装 npm install vue-cookie --save ...