P1563 玩具谜题
题解: n n n个玩具围成一个圈,但是方向有的朝内有的朝外,因此每个玩具的左右手方向取决于它是朝内还是朝外。如果玩具朝内,并且是往左方向数,那么根据图来看就是序号减小的方向;如果朝外,并且往右方向数,就是序号减小的方向。拿数字表达就是(0 & 0 || 1 & 1) 对应序号减小方向,否则就是增大方向,那么显然我们可以想到利用异或的性质。
代码
#include<bits/stdc++.h>
using namespace std;
struct person{
bool dir;
char s[12];
}a[100010];
int main()
{
#ifndef ONLINE_JUDGE
freopen("P1563.in","r",stdin);
#endif
int n,m,d,x; char s[10];
scanf("%d%d",&n,&m);
for(int i = 0; i < n; ++i){
scanf("%d %s",&d,s);
a[i].dir = d;
strcpy(a[i].s,s);
}
int dx = 0;
for(int i = 0; i < m; ++i){
scanf("%d%d",&d,&x);
d = d ^ a[dx].dir;
dx = (dx + (d?1:-1) * x + n) % n;
}
printf("%s\n",a[dx].s);
return 0;
}