2015 ACM-ICPC国际大学生程序设计竞赛北京赛区网络赛 1002 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的更多相关文章
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 B Mission Impossible 6
#1228 : Mission Impossible 6 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You must have seen the very famou ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 Scores
#1236 : Scores 时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 Kyle is a student of Programming Monkey Element ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛
#1235 : New Teaching Buildings 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 Thanks to the generous finance ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 The Book List
描述 The history of Peking University Library is as long as the history of Peking University. It was b ...
- hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 A Simple Job
描述 Institute of Computational Linguistics (ICL), Peking University is an interdisciplinary institute ...
- hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)
#1389 : Sewage Treatment 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 After years of suffering, people coul ...
- hihoCoder 1391 Countries 【预处理+排序+堆】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)
#1391 : Countries 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There are two antagonistic countries, countr ...
- hihoCoder 1392 War Chess 【模拟】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)
#1392 : War Chess 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Rainbow loves to play kinds of War Chess gam ...
随机推荐
- 初始化master节点时,日志内容分析
root@master:~/code/shell# kubeadm init --image-repository registry.aliyuncs.com/google_containers ++ ...
- Intellij IDEA debug jar包
打成jar包 mvn clean install -Dmaven.test.skip=true jar包保存在target目录下 启动jar Terminal控制台执行下面的命令,启动jar java ...
- 模板方法模式-TemplateMethod
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的机构即可以重定义算法的某些特定步骤. 模板方法模式是通过吧不变形为搬移到超类,去除子类中的重复代码 ...
- 推断php操作mysql(添删改查)是否成功
近期在使用CI框架 , 可是里面的数据库操作没有ThinkPhp方便 , 不知道数据库操作的反馈信息 , 仅仅好借助原生方法来推断是否操作数据库成功 推断php操作mysql(添删改查)是否成功,主要 ...
- C# partial分部类和分部方法
1.https://www.cnblogs.com/xcsn/p/7533238.html 它是一个关键字修饰符.可以将类或结构.接口或方法的定义拆分到两个或更多个源文件中. 每个源文件包含类型或方法 ...
- xunit输出output到控制台
1.https://xunit.github.io/docs/capturing-output 里面似乎提到2个方法,第二个方法还需要在配置文件中添加appSetting 这里采用第一种方法, 1.添 ...
- Swift(二)控制流
要处理条件逻辑,使用 if 和 switch ,要处理循环逻辑,使用 for-in, for, while, 和 do-while .包着条件或者循环的括号可加可不加.处理逻辑体的花括弧是必须加的. ...
- RecyclerView 局部刷新(获取viewHolder 去刷新)
RecyclerView.ViewHolder viewHolder = mRecyclerView.findViewHolderForAdapterPosition(i); if (viewHold ...
- RPi 2B IPC webcam server
/**************************************************************************** * RPi 2B IPC webcam se ...
- I.MX6 boot from Micro SD
/***************************************************************************** * I.MX6 boot from Mic ...