zoukankan      html  css  js  c++  java
  • EOJ 3 玩具谜题

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

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

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

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

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

    “singer 朝内,左数第 3 个是 archer。
    “archer 朝外,右数第 1 个是 thinker。
    “thinker 朝外,左数第 2 个是 writer。
    “所以眼镜藏在 writer 这里!”

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

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

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

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

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

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


     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 struct guy{int dir;char name[14];};
     5 int main()
     6 {
     7     guy v[100001];
     8     int n,req,p=0;scanf("%d%d",&n,&req);
     9     for(int m=0;m<n;m++)
    10         scanf("%d%s",&v[m].dir,&v[m].name);
    11         
    12     while(req--)
    13     {
    14         int direct,go;
    15         scanf("%d%d",&direct,&go);
    16         p=((!v[p].dir&&!direct)||(v[p].dir&&direct))?p=(p-go+n)%n:p=(p+go)%n;
    17     }
    18     cout << v[p].name << endl;
    19     return 0;
    20 }

    16行,关键就是把数组看成一个圆圈(尾和头相连),如何实现从尾绕到头或从头跨到尾的。

    1 if((!v[p].dir&&!direct)||(v[p].dir&&direct))
    2             while(go--)
    3                 p==0?p=n-1:p--;
    4         else
    5             while(go--)
    6                 p==n-1?p=0:p++;

    一开始是这么写的,不出所料地超时了。

    另外使用cin读取比scanf慢了一倍。

  • 相关阅读:
    保存时出错jup
    Spyder默认页面布局调整
    根据所处位置提取单元格内容的函数(left、right、mid)和查找字符串位于单元格内容第几位的函数(find)
    excel打印出现多余空白页
    Excel的布尔值运算
    excel VBA一个fuction同时执行多个正则表达式,实现方法
    excel VBA把一个单元格内容按逗号拆分并依次替换到另一个单元格的括号里面(本题例子,把文本中的括号换成{答案}的格式,并按顺序填空)
    excel自动记录项目完成进度,是否逾期,逾期/提前完成天数,计算天数可以把now()改为today()
    jquery循环动画
    jquery动画(控制动画隐藏、显示时间轴)
  • 原文地址:https://www.cnblogs.com/Jiiiin/p/8596923.html
Copyright © 2011-2022 走看看