小人面朝内外的左右移动可以视为一个指向小人的变量的加减
另外应该注意变量小于0或大于n时的情况
将不同情况对应到多维数组中的想法主要来自于上一篇题解中神犇的代码
觉得这题可以试试这种写法,才有了这段精巧的代码
#include <iostream>
using namespace std;
int n,m,a,b,p;
int s[2][2]={{-1,1},{1,-1}};//加或减
struct node{
int f;
string name;
};
int main(){
cin>>n>>m;
node c[n];
for(int i=0;i<n;i++)
cin>>c[i].f>>c[i].name;
while(m--){
cin>>a>>b;
p+=s[c[p].f][a]*b;//s的正负由f(朝向)和a(向左或向右)决定,b为移动次数
if(p<0) p+=(p/n+1)*n;
p%=n;
}
cout<<c[p].name;
return 0;
}