嗯...
题目链接:https://www.luogu.org/problem/P1563
这道题主要问题就是弄明白顺逆时针的问题,其实可以简化成一个异或的问题:
当head与x异或值为零时,即为顺时针;否则为逆时针。
其次要注意顺逆时针的处理:
顺:now = (now + y) % n; 逆:now = (now + n - y) % n;
细节:a[]的下标要从0开始,因为在%操作中余数会出现0的情况
AC代码:
#include<cstdio>
#include<iostream> using namespace std; struct node{
int head;
string name;
} a[]; int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i = ; i < n; i++)
cin >> a[i].head >> a[i].name;
int now = ;
for(int i = ; i <= m; i++){
int x, y;
scanf("%d%d", &x, &y);
if(x ^ a[now].head) now = (now + y) % n;
else now = (now + n - y) % n;
}
cout << a[now].name;
return ;
}
AC代码