题目描述
  Given a string  consists of lower case letters. You're going to perform 
 operations one by one. Each operation can be one of the following two types.
  Modify: Given an integer , you need to modify 
 according to the value of 
. If 
 is positive, move the leftmost 
 letters in 
 to the right side of 
; otherwise, move the rightmost 
 letters in 
 to the left side of 
.
  Answer: Given a positive integer . Please answer what the 
-th letter in the current string 
 is.
输入描述
  There are  lines in the input. The first line of the input contains the string 
. The second line contains the integer 
. The following 
 lines each denotes an operation. You need to follow the order in the input when performing those operations.
  Each operation in the input is represented by a character  and an integer 
. If 
c=='M', this operation is a modify operation, that is, to rearrange  according to the value of 
; if 
c=='A', this operation is an answer operation, to answer what the -th letter in the current string 
 is.
   (
 stands for the length of the string 
).
   consists of lower case letters.
  .
   or 
. If 
, 
. If 
, 
.
  There is at least one operation in the input satisfies .  
输出描述
For each answer operation, please output a letter in a separate line representing the answer to the operation. The order of the output should match the order of the operations in the input.
示例1
输入
nowcoder 6 A 1 M 4 A 6 M -3 M 1 A 1
输出
n o w
备注
  Initially,  is "nowcoder", six operations follow.
  The -st operation is asking what the 
-st letter is. The answer is 'n'.
  The -nd operation is to move the leftmost 
 letters to the rightmost side, so 
 is modified to "odernowc".
  The -rd operation is asking what the 
-th letter is. The answer is 'o'.
  The -th operation is to move the rightmost 
 letters to the leftmost side, so 
 is modified to "owcodern".
  The -th operation is to move the leftmost 
 letter to the rightmost side, so 
 is modified to "wcoderno".
  The -th operation is asking what the 
-st letter is. The answer is 'w'.
分析
  将字符串看作一个环,定义一个指针  指向字符串的起点,从起点开始逆时针遍历整个环,得到的就是当前字符串;不论如何更改,环的结构是不会变的。查询时,从起点开始,逆时针经过 
 个点,最终到达的点即为询问的答案;更新时,若 
,要将字符串末尾的某个字符作为起点,将指针顺时针移动 
 次;否则,将指针逆时针移动 
 次。环上的移动,通过对字符串长度 
 取模来体现。
  
代码
/******************************************************************
Copyright: 11D_Beyonder All Rights Reserved
Author: 11D_Beyonder
Problem ID: 2020牛客暑期多校训练营(第三场) Problem B
Date: 8/14/2020
Description: Pointer Simulation
*******************************************************************/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=2000005;
int _;
char s[N];
int q;
int len;
int main(){
    scanf("%s%d",s,&q);
    len=strlen(s);
    int pointer=0;
    while(q--){
        char c;
        int x;
        getchar();
        scanf("%c%d",&c,&x);
        if(c=='M'){
            //取模体现环上移动的性质
            pointer=(pointer+x+len)%len;
        }else{
            printf("%c\n",s[(pointer+x-1)%len]);
        }
    }
    return 0;
} 
京公网安备 11010502036488号