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 ...
随机推荐
- centos 7.xx 安装LAMP环境
一.安装Apache 1.安装yum -y install httpd2.开启apache服务systemctl start httpd.service3.设置apache服务开机启动systemct ...
- 第一讲:使用html5——canvas绘制奥运五环
<html> <head> <title>初识canvas</title> </head> <body> <canvas ...
- Joomla中的Task 和view 深入学习
[本文转自:梦溪笔记] Joomla 是一个优秀的CMS系统,她可以让你快速的完成一个网站的建设,她提供组件,模块,模板能够满足你大部分的网站需求.而组件在其中举足轻重. 一.基本知识 组件(comp ...
- java -jar 与nohup的区别
——作为java程序员,经常会遇到这样一个问题,打个jar包,测试或者上线生产,于是乎面临的选择来了,java –jar or nohup? 下面我来扒一扒: 一. java -jar a.ja ...
- h5 getUserMedia error PermissionDeniedError
HTML5 在使用非 localhost 地址访问时打开摄像头失败 .报getUserMedia error PermissionDeniedError,火狐下是可以正常调取的. 需要https: 火 ...
- git push不成功 insufficient permission for adding an object to repository database
这常见于多用户. 1. 确保所有用户在同一个组: 2. 确保所有文件被组可读写. 当多个用户各自进行了push操作后,object目录下的文件可能各自属于各个用户.
- can't set android permissions - built without android support
/**************************************************************************** * can't set android pe ...
- 「网络流24题」「Codevs1237」 餐巾计划问题
1237 餐巾计划问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相 ...
- javascript之表格节点操作
<html> <div class='add'> 名字: <input type="" name=""&g ...
- win7Setx修改环境变量
SETX.exe (Resource Kit, Windows 7) Set environment variables permanently, SETX can be used to set En ...