题目链接:

  #1228 : Mission Impossible 6

解题思路:

  认真读题,细心模拟,注意细节,就没有什么咯!写这个题解就是想记录一下rope的用法,以后忘记方便复习。

  rope(块状链表)属于SGI STL的一部分,不属于ISO C++标准库,但libstdc++-v3也包含了扩展,在头文件#include<ext/rope>,using namespace __gnu_cxx命名空间中。可以在很短的时间内实现快速的插入、删除和查找字符串。

rope.size()              返回容器中元素个数

rope.length()            返回容器中元素个数

rope.begin()             返回一个头指针

rope.end()              返回一个尾指针

rope.empty()            返回容器是否为空

rope.at(size_t i)            返回rope中第i个元素

rope.pop_front()           弹出第一个元素

rope.pop_back()           弹出最后一个元素

rope.push_front()         在最前端插入一个元素

rope.push_back()         在尾端插入一个元素

rope.substr(size_t  i, size_t n)    提取以i开头长度为n的序列返回给rope

rope.replace(size_t i, charT c)     i后面的元素都替换为c

rope.erase(size_t i, size_t n)     删除从i开始,连续n个元素

rope.insert(size_t i, charT c)     在i元素前面插入字符c

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <ext/rope>
using namespace std;
using namespace __gnu_cxx;
/*
鬼畜的模拟题!从新拿出来写一下还是会出错
其实用rope写还是方便很多的
注意一下题目的坑还是很容易过的
1:每次复制文本为空,粘贴板才会清空
2:当在复制状态为start时,操作D会使光标改变
3:如果在文档限制长度内,不能把粘贴板上的内容复制完,则不操作
4:除L,R外任何字符都能把复制状态从start转化为nothing
*/
const int maxn = ;
char b[maxn];
int main ()
{
int T, n;
int mark, c_state, t_state, len;
scanf ("%d", &T);
while (T --)
{
crope c, a;
scanf ("%d %s", &n, b);
len = strlen (b);
t_state = ;
c_state = -;
mark = -;
for (int i=; i<len; i++)
{
if (b[i]<='z' && b[i]>='a')
{
if (c_state != -)
c_state = -;
if (t_state == || a.size()==mark+)
{
if (a.size() >= n)
continue;
a.insert(mark+,b[i]);
}
else
{
a.erase (mark+, );
a.insert (mark+, b[i]); }
mark ++;
}
else if (b[i] == 'L')
{
if (mark > -)
mark --;
}
else if (b[i] == 'R')
{
if (a.size() > mark+)
mark ++;
}
else if (b[i] == 'S')
{
if (c_state != -)
c_state = -;
t_state = (t_state + ) % ;
}
else if (b[i] == 'D')
{
if (c_state != -)
{
if (mark > c_state)
a.erase (c_state + , mark - c_state);
if (c_state > mark)
a.erase (mark + , c_state - mark);
mark = min (mark, c_state);
c_state = -;
}
else if (a.size() > mark+)
a.erase( mark+, );
}
else if (b[i] == 'B')
{
if (c_state != -)
c_state = -;
if (mark > -)
a.erase (mark, ), mark --;
}
else if (b[i] == 'C')
{
if (c_state == -)
c_state = mark;
else
{
c = a.substr (min(c_state, mark)+, max(c_state, mark)-min(c_state, mark));
c_state = -;
}
}
else if (b[i] == 'V')
{
if (c_state != -)
c_state = -;
int mm = a.size() + c.size();
if (t_state == && mm > n)
continue ;
mm = mark + + c.size();
if (t_state == && mm > n)
continue ;
mm = c.size();
for (int j=; j<mm; j++)
{
if (t_state == || a.size()==mark+)
{
if (a.size() >= n)
continue;
a.insert (mark+, c.at(j));
}
else
{
a.erase (mark+, );
a.insert (mark+, c.at(j));
}
mark ++;
}
}
}
if (a.size() == )
printf ("NOTHING\n");
else
cout<<a<<endl;
}
return ;
}
/*
3
5 abaaaCLLLLCDLV
5 abcdeSLLCLLLCRRV
5 abcdeCLLLCSCRRRRDV aaaa
ababc
abcde
*/

2015 ACM-ICPC国际大学生程序设计竞赛北京赛区网络赛 1002 Mission Impossible 6的更多相关文章

  1. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 B Mission Impossible 6

    #1228 : Mission Impossible 6 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You must have seen the very famou ...

  2. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 Scores

    #1236 : Scores 时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 Kyle is a student of Programming Monkey Element ...

  3. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛

    #1235 : New Teaching Buildings 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 Thanks to the generous finance ...

  4. ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 The Book List

    描述 The history of Peking University Library is as long as the history of Peking University. It was b ...

  5. hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...

  6. ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 A Simple Job

    描述 Institute of Computational Linguistics (ICL), Peking University is an interdisciplinary institute ...

  7. hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1389 : Sewage Treatment 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 After years of suffering, people coul ...

  8. hihoCoder 1391 Countries 【预处理+排序+堆】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1391 : Countries 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There are two antagonistic countries, countr ...

  9. hihoCoder 1392 War Chess 【模拟】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1392 : War Chess 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Rainbow loves to play kinds of War Chess gam ...

随机推荐

  1. sendmessage传递数组

    1.在初始化数组尤其是需要每次都初始化的时候,很多同学使用循环来进行,这样不但速度慢,而且写起来也很长.所以现在提供一个函数来实现这个功能... 原型:extern void *memset(void ...

  2. debian apt-get工作的原理

    1 apt-get update apt-get update并没有将远程仓库的包都下载到本地,而是通过访问远程仓库创建或者更新了远程仓库的本地索引,索引文件放在/var/lib/apt/lists目 ...

  3. Micro Frontends

    Micro Frontends - extending the microservice idea to frontend development https://micro-frontends.or ...

  4. iframe 框架中 父子界面的JS调用

    子界面调用父界面 window.parent.hello(); 父界面调用子界面 window.frmaes[i].hello();

  5. OPENCV在ARM平台的移植

    两篇别人推荐给我的文章,我想直接复制过来,呵呵,但一想真不好,等我做一遍了再来写一遍.还是贴链接. OpenCV在ARM上的移植:http://www.cnblogs.com/emouse/archi ...

  6. 命令行唤起xcode模拟器

    1.IOS模拟器列表获取命令 xcrun instruments -s 2.IOS启动模拟器命令 xcrun instruments -w "iPhone 8 (12.1)"

  7. 计算机学院大学生程序设计竞赛(2015’12)01 Matrix

    01 Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. DedeCMS模板中用彩色tag做彩色关键词

    DedeCMS模板中用彩色tag做彩色关键词,下面分享一下吧!修改方法: 1.在/include/common.func.php 中加入如下函数: function getTagStyle() { $ ...

  9. 非旋treap (BZOJ1895)

    记个板子,还是挺好用的. #include <bits/stdc++.h> using namespace std; ]; int rt,n,m,l,r,x,A,B,C,t; struct ...

  10. FINDSTR 命令使用详解

    Findstr 使用正则表达式搜索文件中的文本模式. 语法 findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/ ...