• 【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/
  • 相关阅读:
    Android WiFi系统【转】
    Android Wifi简单的梳理【转】
    深入浅出
    ubuntu16.04固定IP与设置DNS【转】
    Linux内核同步【转】
    android的GPS代码分析JNI如何HAL之间如何设置回调函数【转】
    基于android的GPS移植调用关系【转】
    【转】使用XCODE 的SOURCE CONTROL 做版本控制 (1)
    Objective-C 记录
    【转】Xcode重构功能怎么用我全告诉你
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/3959455.html
Copyright © 2020-2023  润新知