题意:一个模拟……大概就是模拟一个编辑文档的过程……具体的还是读题吧……

解法:刚开场就发现的一个模拟……果断敲起来……

要注意几点与实际编辑过程不同:

1.当用C操作标记一段字符后,只有D会改变这段字符,其他操作例如V或输入字符都不会改变这段字符,只会取消标记状态,在当前光标位置进行操作。

2.在替换模式下,V操作会进行替换粘贴,与传统编辑模式不同。

3.如果输入操作或者V操作进行后就会超过文档长度,那么就不进行操作。

大概就这些吧……模拟的过程和按题里说的写就没问题……C的处理麻烦一些,但是题目已经给出了解决方案……

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int m;//文本最大长度
scanf("%d", &m);
string s;//输入序列
cin >> s;
string txt;//文本
int len = s.size();
int istatus = 0, cstatus = 0;//输入状态:0插入,1替换;复制状态:0nothing,1start
int now = 0, cp;//now当前光标位置,cp是copy position 1
string cb;//剪贴板
for(int i = 0; i < len; i++)
{
if(s[i] >= 'a' && s[i] <= 'z')
{
if(cstatus) cstatus = 0;
if(istatus == 0 && txt.size() < m)
txt.insert(txt.begin() + now++, s[i]);
else if(istatus == 1)
{
if(now < txt.size()) txt[now++] = s[i];
else if(txt.size() < m) txt.insert(txt.begin() + now++, s[i]); }
}
if(s[i] == 'L')
{
if(now) now--;
}
if(s[i] == 'R')
{
if(now != txt.size()) now++;
}
if(s[i] == 'S')
{
if(cstatus) cstatus = 0;
istatus = !istatus;
}
if(s[i] == 'D')
{
if(cstatus)
{
int minp = min(now, cp), maxp = max(now, cp);
cstatus = 0;
txt.erase(txt.begin() + minp, txt.begin() + maxp);
now = minp;
}
else
{
if(txt.size())
{
if(now != txt.size())
{
txt.erase(txt.begin() + now);
}
}
}
}
if(s[i] == 'B')
{
if(cstatus) cstatus = 0;
if(now)
{
txt.erase(txt.begin() + --now);
}
}
if(s[i] == 'C')
{
if(cstatus)
{
int minp = min(now, cp), maxp = max(now, cp);
cstatus = 0;
cb.clear();
cb.insert(cb.begin(), txt.begin() + minp, txt.begin() + maxp);
}
else
{
cstatus = 1;
cp = now;
}
}
if(s[i] == 'V')
{
if(cstatus) cstatus = 0;
if(istatus == 0)
{
if(txt.size() + cb.size() <= m)
{
txt.insert(now, cb);
now += cb.size();
}
}
else
{
if(m - now >= cb.size())
{
txt.erase(txt.begin() + now, txt.begin() + min(now + cb.size(), txt.size()));
txt.insert(txt.begin() + now, cb.begin(), cb.end());
now += cb.size();
}
}
}
}
if(txt.size())
cout << txt << endl;
else
puts("NOTHING");
}
return 0;
}

  

hihocoder 1228 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. 2015 ACM-ICPC国际大学生程序设计竞赛北京赛区网络赛 1002 Mission Impossible 6

    题目链接: #1228 : Mission Impossible 6 解题思路: 认真读题,细心模拟,注意细节,就没有什么咯!写这个题解就是想记录一下rope的用法,以后忘记方便复习. rope(块状 ...

  3. Mission Impossible 6

    题目:Mission Impossible 6 题目链接:http://hihocoder.com/problemset/problem/1228 题目大意: 大概就是让我们写一个代码模拟文本编辑器的 ...

  4. hdu 3272 Mission Impossible

    Mission Impossible Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  5. 2015北京网络赛B题 Mission Impossible 6

    借用大牛的一张图片:模拟 #include<cstdio> #include<cmath> #include<cstring> #include<algori ...

  6. hiho Mission Impossible 6(模拟 未提交验证。。)

    题意:模拟文本操作 思路:模拟 #include<iostream> #include<stdio.h> #include<string.h> using name ...

  7. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  8. 五、Pandas玩转数据

    Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...

  9. 华为5G空口新技术(2015年)

    2015-03-24 长江后浪推前浪,4G建设方兴未艾,业界关于5G的讨论已如火如荼.对于每一代移动通信,空口技术都相当于王冠上的明珠. 在月初的世界移动通信大会上,华为发布了面向5G的新空口,并展出 ...

随机推荐

  1. Selenium网址

    Selenium官网:http://www.seleniumhq.org/ Selenium火狐插件地址:http://release.seleniumhq.org/selenium-ide/ 浏览器 ...

  2. 数组对象Vector用法

    import java.util.Vector; public class VectorTesting { public static void main(String[] args) { Vecto ...

  3. POJ 2349 Arctic Network(最小生成树,第k大边权,基础)

    题目 /*********题意解说——来自discuss——by sixshine**************/ 有卫星电台的城市之间可以任意联络.没有卫星电台的城市只能和距离小于等于D的城市联络.题 ...

  4. java基础知识回顾之---java StringBuffer,Stringbuilder与String的区别

    public class StringBuilderTest { /** * StringBuffer和Stringbuilder :使用与内容可以被修改的字符串 * 与String的区别:Strin ...

  5. [转] 浅析HTTP协议

    浅析HTTP协议 来源:http://www.cnblogs.com/gpcuster/archive/2009/05/25/1488749.html HTTP协议是什么? 简单来说,就是一个基于应用 ...

  6. jQuery对象与Dom对象的相互转换

    1.jQuery对象转换为Dom对象 [index] var $d = $("#id"); ]; get(index) var $d = $("#id"); ) ...

  7. net中使用母版页

    .net中使用母版页的优点 母版页提供了开发人员已通过传统方式创建的功能,这些传统方式包括重复复制现有代码.文本和控件元素:使用框架集:对通用元素使用包含文件:使用 ASP.NET 用户控件等.母版页 ...

  8. 【Linux高频命令专题(7)】rm

    简述 rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变. 命令格式 rm [选项 ...

  9. RunAsAdmin in windows 8

    function RunAsAdmin(hWnd: HWND; filename: string; Parameters: string): Boolean; { See Step 3: Redesi ...

  10. 62. Unique Paths

    题目: A robot is located at the top-left corner of a m x ngrid (marked 'Start' in the diagram below). ...