题目大意:
给定一个字符串,有q组询问,每次询问有一个字符c,一个数字x,
如果碰到字符A则输出当前字符串中第x个字符(从下标1开始)
如果碰到字符M,若x>0则把字符串最左边x个字符放到最右边,若x<0则把字符串最右边x个字符放到最左边
题目思路:
刚开始准备用string的加法和分割来做,结果这种方法会超时
比赛结束看了队友的代码才知道其实只用记录字符串的初始位置就可以
可以把字符串看成一个环,每次变形我们只需要改动这个字符串的初始位置,然后当遇到字符A的时候,只需要从这个字符串初始的位置开始向后计算位数就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[2000005];
int main()
{
scanf("%s",&s);
int t,len,k=0;
len=strlen(s);
scanf("%d",&t);
while(t--)
{
char op;
int x;
scanf(" %c %d",&op,&x);
if(op=='A')
printf("%c\n",s[(k+x+len-1)%len]);
else
{
k=(k+x+len)%len;
}
}
}