思路:将一圈想象成一个数组,逆时针下标从1开始增加,然后找数学规律,向内向左下标减少,向内向右下标增加。。。聪明人发现异或为1即增加下标
注意:1.每次都要注意下标是否越界,因为是圆,要取模哦
2.数组要开大,不然会报RE
#include <bits/stdc++.h>
using namespace std;
int f[100001]={0},a[100001],s[100001];
string j[100001];
int main(){
int n,m,x=1;
cin>>n;cin>>m;
for(int i=1;i<=n;i++)
{
cin>>f[i];
cin>>j[i];
}
for(int i=0;i<m;i++){
cin>>a[i];
cin>>s[i];
if(a[i]^f[x]==1)
{
//cout<<(a[i]^f[x])<<'/';
x=x+s[i];
if(x>n)
x=x-n;
// cout<<x<<"&";
}
else if(a[i]^f[x]==0)
x=x-s[i];
if(x<1)
x=x+n;
//cout<<x<<"*";
}
cout<<j[x];
return 0;
}