#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct node
{
int x;
string s;
}p[100005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>p[i].x>>p[i].s;
}
int pos=0;
for(int i=0;i<m;i++)
{
int a,s;
cin>>a>>s;
if(a==0)
{
if(p[pos].x==0)
{
if(pos-s<0)pos=pos-s+n;
else pos-=s;
}else if(p[pos].x==1)
{
if(pos+s>n)pos=pos+s-n;
else pos+=s;
}
}
else if(a==1)
{
if(p[pos].x==0)
{
if(pos+s>n)pos=pos+s-n;
else pos+=s;
}else if(p[pos].x==1)
{
if(pos-s<0)pos=pos-s+n;
else pos-=s;
}
}
}
cout<<p[pos].s;
}
为什么对于pos可以直接取余算 看了下题解第一个和我思路一样,但是他取余能过,我却不能进行判断然后加减法,题目说了1≤si<n,减si如果小于0了再加个n;加si大于n了就减去个n 不就可以了吗?