『题解』
纯模拟,判断每个指令实际的方向再加就行。。。
#include
#include
#include
using namespace std;
struct node
{
int di ,t;
char Names[15];
}p[100100];
int n, m;
char c;
int work(int t, int di, int num)
{
if (!p[t].di && !di)
{
t = (t + n) - num;
if (t > n) t -= n;
return t;
}
if (!p[t].di && di)
{
t += num;
if (t > n) t -= n;
return t;
}
if (p[t].di && !di)
{
t += num;
if (t > n) t -= n;
return t;
}
if (p[t].di && di)
{
t = (t + n) - num;
if (t > n) t -= n;
return t;
}
return t;
}
int main(void)
{
freopen("toy.in", "r", stdin);
freopen("toy.out", "w", stdout);
scanf("%d%d", &n, &m);
for (int i = 1;i <= n; i++)
{
scanf("%d", &p[i].di);
scanf("%c", &c);
scanf("%c", &c);
while (c != '\n')
{
p[i].Names[++p[i].t] = c;
scanf("%c", &c);
}
}
int q = 1, di, num;
for (int i = 1;i <= m; i++)
{
scanf("%d%d", &di, &num);
q = work(q, di, num);
}
for (int i = 1;i <= p[q].t; i++)
{
printf("%c", p[q].Names[i]);
}
fclose(stdin);
fclose(stdout);
return 0;
}
by:Z_Dex