题目来源
洛谷P1563玩具谜题
https://www.luogu.org/problem/show?pid=1563
思路
结构体存小人信息(名字toy[i].na+方向toy[i].dir[朝圈外1 朝圈内-1])
pos表示当前位置
输入步骤(方向d[向左-1 向右1]+步数s)
则pos=(pos-d*toy[pos].dir*s)
(
向左&&朝外==向右&&朝内==逆时针 => pos=pos-s(mod n&&pos>0)
向左&&朝内==向右&&朝外==顺时针 => pos=pos+s(mod n&&pos>0)
)
代码(C++)
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int n,m,pos=1,d,s;
struct p{int dir;string na;}toy[100010];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>toy[i].dir>>toy[i].na;
if(toy[i].dir==0) toy[i].dir=-1;
}
for(int i=1;i<=m;i++)
{
cin>>d>>s;
s=s%n;
if(d==0) d=-1;
if(d*toy[pos].dir==-1)
{
pos+=s;
pos%=n;
}
else
{
pos=pos-s;
pos%=n;
pos+=n;
pos%=n;
}
if(pos==0) pos=n;
}
cout<<toy[pos].na;
return 0;
}