纯模拟题,没啥好说的,就是要判断地方有点多,一定要注意细节。
#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;
}