题目链接:

  #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. android keyEvent

    http://developer.android.com/reference/android/view/KeyEvent.html

  2. js中的连等==和全等===

    ===是没有强制类型转换的,和其他大部分语言的==是一样的.而js中==是有类型转换的. 比如说"true"==true就是错的,Boolean("false" ...

  3. bashdb bashdebug

    sudo  apt-get install bashdb bashdb  --debug 一.列出代码和查询代码类: l 列出当前行以下的10行 - 列出正在执行的代码行的前面10行 . 回到正在执行 ...

  4. 内核添加dts后,device和device_driver的match匹配的变动:通过compatible属性进行匹配【转】

    本文转载自:http://blog.csdn.net/ruanjianruanjianruan/article/details/61622053 内核添加dts后,device和device_driv ...

  5. SDUT OJ 2054 双向链表的实现 (结构体node指针+遍历 *【模板】)

    双向链表 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 学会了单向链表,我们又多了一种解决问题的能力,单链表利用一个指针就能在内 ...

  6. 探讨Ajax中有关readyState(状态值)和status(状态码)的问题

    先看下面一段代码,然后给大家详细介绍,Ajax中有关readyState(状态值)和status(状态码)的问题,具体内容如下所示: var getXmlHttpRequest = function ...

  7. 教你开发jQuery插件

    jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践. 根据<jQuery高级编程&g ...

  8. python-dev 安装错误

    /******************************************************************** * python-dev 安装错误 * 说明: * 今天在安 ...

  9. 【扬中集训 DAY4T3】holiday

    [题目链接] 点击打开链接 [算法] 建C棵线段树即可,注意要用前缀和优化 [代码] 这是标程 #include <bits/stdc++.h> using namespace std; ...

  10. NOIP2008题解

    传送门 考查题型 二分图 暴力枚举 判断素数 dp T1 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和 ...