題目:

思路:
模拟計算。我們使用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;
}