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 ...
随机推荐
- HDU 3249 Test for job (有向无环图上的最长路,DP)
解题思路: 求有向无环图上的最长路.简单的动态规划 #include <iostream> #include <cstring> #include <cstdlib ...
- xamarin.android listview绑定数据及点击事件
前言 listview是用来显示数据列表的一个控件,今天给大家带来如何使用cursor进行数据绑定以及点击事件. 导读 1.如何创建一个listview 2.如何使用cursor进行绑定数据 3.li ...
- quilt
1 什么是quilt quilt是一个patch管理工具,特别适合于对多个patch进行管理. quilt是基于gnu patch和diff的. 2 使用quilt创建一个patch 第一步,quil ...
- Mac OS安装Scrapy
个人觉得掌握简单的爬虫知识非常有用,特别是想要从一些特定网站自动地下载一些资源或者统计一些数据,非常的有用.对于产品经理来说,如果要了解竞争产品.替代产品的价格,可以写一个爬虫脚本从各大电商网站爬取相 ...
- redis02---对于key的操作命令
Redis对于key的操作命令 del key1 key2 ... Keyn 作用: 删除1个或多个键 返回值: 不存在的key忽略掉,返回真正删除的key的数量 rename key newkey ...
- manacher求最长回文子串算法模板
#include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...
- POJ2243 Knight Moves —— A*算法
题目链接:http://poj.org/problem?id=2243 Knight Moves Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- javascript XMLHttpRequest 对象的open() 方法参数说明
下文是从w3c上摘录下来的,其中参数 method 说明的很简短,不是很理解,所以又找了些资料作为补充.文中带括号部分. XMLHttpRequest.open() 初始化 HTTP 请求参数 语法o ...
- poj 1274 The Perfect Stall 解题报告
题目链接:http://poj.org/problem?id=1274 题目意思:有 n 头牛,m个stall,每头牛有它钟爱的一些stall,也就是几头牛有可能会钟爱同一个stall,问牛与 sta ...
- lock的两种方式
假设现在我们有100个数据项可以读写.有若干个线程,任何一个线程可能对任何一个数据项尽心读写. 但是,如果不同的线程在对同一个数据项进行读写,就可能发生错误.需要使用lock进行控制. 比如线程x要对 ...