又来一篇水极的题解!
但代码非常短!!!
用到了一点点异或的知识:
0^0=0 0^1=1 1^0=1 1^1=0
也就是说两个数不同才能是1,否则是0。。。
好啦,代码如↓(纯模拟)
#include <cstdio>
#include <cstdlib>
using namespace std;
#define MAXN 100100
int n,m,ans=1,s,a,out[MAXN];//out代表小人儿的朝向,ans是“凶手”的编号
char name[MAXN][75];//职业名称
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d%s",&out[i],name[i]);
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&s);//下一行用到了异或
ans=(ans+(a^out[ans]?s:n-s))%n,ans=(!ans?n:ans);
}
printf("%s\n",name[ans]);
return 0;
}