1. 程式人生 > 實用技巧 >B.Classical String Problem - 2020牛客暑期多校訓練營(第三場) - 思維

B.Classical String Problem - 2020牛客暑期多校訓練營(第三場) - 思維

B.Classical String Problem

題目下載

B_Classical_String_Problem.htm.zip

題解

如果將字串S看作是首尾相接的一個環,那麼M操作實際上只是不會對環造成任何影響,只是將環破成鏈之後的首字母的位置改變了。

例如

White\(M \ 2\)

看作環,馬上就可以想到取模操作

只需要維護一個當前首字母的指標\(ptr\)即可
這題用cin,cout會T,儘量用scanf和printf(能過當我沒說,反正我T了)

#include <cstdio>
#include <cstring>

#define MaxN 2000000+1
using namespace std;

char str[MaxN];
int main(){
    scanf("%s",str);
    int n = strlen(str);
    int q,x;
    int ptr = 0;
    scanf("%d",&q);
    
    char cmd;
    while (q--) {
        getchar();
        scanf("%c %d",&cmd,&x);
        if(cmd == 'M'){
            ptr = (ptr + x + n) % n;
        }else{
            x = (x - 1 + ptr) % n;
            putchar(str[x]);
            putchar('\n');
        }
    }
    return 0;
}