题目:
思路:
模拟计算。我们使用pos变量记录我们走到了哪里。
我们发现,如果朝向和圈内/圈外相同,那么结果是左数。否则,结果是右数。两个条件相同/不同,可以使用异或运算符。
顺/逆时针可以使用下面的代码,注意取模计算。
pos=(pos+s)%n;
pos=(pos+n-s)%n;
需要注意,圆圈问题中数组最好用0开始计数,避免某些问题。
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m;//人数,指令数
string job[N];
int face[N];//朝向
//0表示圈内 1表示圈外
//0表示左数 1表示右数
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>face[i]>>job[i];
}
int pos=0;
for(int i=0;i<m;i++){
int a,s;
cin>>a>>s; //a:左右 s:数字
if(face[pos]^a){//顺时针
pos=(pos+s)%n;
}
else{//逆时针
pos=(pos+n-s)%n;
}
}
cout<<job[pos]<<endl;
return 0;
}