zoukankan      html  css  js  c++  java
  • 【rope】bzoj1269 [AHOI2006]文本编辑器editor

    维护一个字符串,支持以下操作:

     
    【rope】bzoj1269 [AHOI2006]文本编辑器editor - AutSky_南北組UP - AutSky_JadeK’s Codes

    【rope】bzoj1269 [AHOI2006]文本编辑器editor - AutSky_南北組UP - AutSky_JadeK’s Codes
     

    主要就是 成段插入、成段删除、成段翻转。前两个操作很好通过rope实现。第三个操作也不难,维护两个rope,一个正向,一个反向,翻转时swap一下就行了。
     
    rope教程: http://blog.csdn.net/iamzky/article/details/38348653
     
    Code(Orz zky):
     1 #include<cstdio>
     2 #include<ext/rope>
     3 using namespace std;
     4 using namespace __gnu_cxx;
     5 crope a,b,tmp;
     6 int n,p,sz,len,res;
     7 char op[21],s[2000001],r[2000001],c;
     8 inline int getint(){res=0;c='*';while(c<'0'||c>'9')c=getchar();while(c>='0'&&c<='9'){res=res*10+(c-'0');c=getchar();}return res;}
     9 int main()
    10 {
    11     scanf("%d",&n);
    12     for(;n>0;n--)
    13       {
    14           scanf("%s",op);
    15           if(op[0]=='M')p=getint();
    16           else if(op[0]=='P')p--;
    17         else if(op[0]=='N')p++;
    18           else if(op[0]=='G'){putchar(a[p]);putchar('
    ');}
    19           else if(op[0]=='I')
    20             {
    21                 sz=getint();
    22                 len=a.length();
    23                 for(int i=0;i<sz;i++){
    24                   do{s[i]=getchar();}while(s[i]=='
    ');
    25                   r[sz-i-1]=s[i];
    26                 }
    27             s[sz]=r[sz]='';
    28             a.insert(p,s);
    29             b.insert(len-p,r);
    30             }
    31           else if(op[0]=='D')
    32             {
    33               sz=getint();
    34             len=a.length();
    35             a.erase(p,sz);
    36             b.erase(len-p-sz,sz);
    37             }
    38           else if(op[0]=='R')
    39             {
    40                 sz=getint();
    41             len=a.length();
    42             tmp=a.substr(p,sz);
    43             a=a.substr(0,p)+b.substr(len-p-sz,sz)+a.substr(p+sz,len-p-sz);
    44             b=b.substr(0,len-p-sz)+tmp+b.substr(len-p,p);
    45             }
    46       }
    47     return 0;
    48 }
    ——The Solution By AutSky_JadeK From UESTC 转载请注明出处:http://www.cnblogs.com/autsky-jadek/
  • 相关阅读:
    Nginx 配置请求响应时间
    数论筛法小结
    梅田湖种田划水摸鱼记
    好题
    奇技淫巧 (不定期更新)
    随机化算法小结(Miller Rabin,Pollard Rho, 模拟退火, 随机化贪心)
    题解 P6918 [ICPC2016 WF]Branch Assignment
    P2605 [ZJOI2010]基站选址解题思路
    题解 BZOJ 3156 防御准备
    Flutter大坑 Your Xcode project requires migration 报错大坑
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/3959455.html
Copyright © 2011-2022 走看看