B 子串翻转

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e6+10;
 4 deque<char>S;
 5 char s[N];
 6 int n,m,q;
 7 int flag;
 8 int l;
 9 int main()
10 {
11     scanf("%d%d%d",&n,&m,&q);
12     scanf("%s",s);
13     for(int i=0;i<m;++i) S.push_back(s[i]);
14     for(int i=1;i<=q;++i)
15     {
16         int ty,pos;
17         scanf("%d%d",&ty,&pos);
18         if(ty==1){
19             while(l<pos-1){
20                 if(flag){
21                     s[l]=S[m-1];
22                     S.pop_back();
23                     S.push_front(s[l+m]);
24                 }
25                 else{
26                     s[l]=S[0];
27                     S.pop_front();
28                     S.push_back(s[l+m]);
29                 }
30                 ++l;
31             }
32             flag^=1;
33         }
34         else{
35             if(pos-1<l||pos-1>=l+m) printf("%c",s[pos-1]);
36             else{ 
37                 if(flag) printf("%c",S[m-pos+l]);
38                 else printf("%c",S[pos-l-1]);
39             }
40         }
41     }
42 }
View Code

 

posted @ 2020-09-06 11:04  古比  阅读(129)  评论(0编辑  收藏  举报