洛谷P1563 玩具谜题(模拟)

P1563 玩具谜题

题解: n n n个玩具围成一个圈,但是方向有的朝内有的朝外,因此每个玩具的左右手方向取决于它是朝内还是朝外。如果玩具朝内,并且是往左方向数,那么根据图来看就是序号减小的方向;如果朝外,并且往右方向数,就是序号减小的方向。拿数字表达就是(0 & 0 || 1 & 1) 对应序号减小方向,否则就是增大方向,那么显然我们可以想到利用异或的性质。

代码

#include

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;
}

你可能感兴趣的:(算法,洛谷)