Luogu P1563 [NOIp2016提高组]玩具谜题 | 模拟

题目链接

纯模拟题,没啥好说的,就是要判断地方有点多,一定要注意细节。

#include<iostream>
#include<cstdio>
#include<fstream>
#include<algorithm>
#include<string>
#include<sstream>
#include<cstring>
    using namespace std;
    int k[100005];
    char s[100005][20]; 
int main()
{
    int n=0,m=0,now=1;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d%s",&k[i],s[i]);
    for(int i=1;i<=m;i++)
    {
        int x=0,y=0;
        scanf("%d%d",&x,&y);
        if(x==0)//如果是向左数 
            if(k[now]==0)//如果这个人朝内 
                if(now-y%n>=1) now-=y%n;//就减 
                          else now=n-(y%n-now);
            else now=(now+y)%n;//否则就加 
        else//否则 
            if(k[now]==1)//如果这个人朝外 
                if(now-y%n>=1) now-=y%n;//就减 
                          else now=n-(y%n-now);
            else now=(now+y)%n;//否则就加 
        if(now==0) now=n;//当now等于n时刚好会被n模成0,所以要判断一下 
    }
    printf("%s",s[now]);
    return 0;
}

 

posted @ 2018-02-21 01:15  wozaixuexi  阅读(201)  评论(0编辑  收藏  举报