hihocoder 1228 Mission Impossible 6
题意:一个模拟……大概就是模拟一个编辑文档的过程……具体的还是读题吧……
解法:刚开场就发现的一个模拟……果断敲起来……
要注意几点与实际编辑过程不同:
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的更多相关文章
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 B Mission Impossible 6
#1228 : Mission Impossible 6 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You must have seen the very famou ...
- 2015 ACM-ICPC国际大学生程序设计竞赛北京赛区网络赛 1002 Mission Impossible 6
题目链接: #1228 : Mission Impossible 6 解题思路: 认真读题,细心模拟,注意细节,就没有什么咯!写这个题解就是想记录一下rope的用法,以后忘记方便复习. rope(块状 ...
- Mission Impossible 6
题目:Mission Impossible 6 题目链接:http://hihocoder.com/problemset/problem/1228 题目大意: 大概就是让我们写一个代码模拟文本编辑器的 ...
- hdu 3272 Mission Impossible
Mission Impossible Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 2015北京网络赛B题 Mission Impossible 6
借用大牛的一张图片:模拟 #include<cstdio> #include<cmath> #include<cstring> #include<algori ...
- hiho Mission Impossible 6(模拟 未提交验证。。)
题意:模拟文本操作 思路:模拟 #include<iostream> #include<stdio.h> #include<string.h> using name ...
- ACM计算几何题目推荐
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- 五、Pandas玩转数据
Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...
- 华为5G空口新技术(2015年)
2015-03-24 长江后浪推前浪,4G建设方兴未艾,业界关于5G的讨论已如火如荼.对于每一代移动通信,空口技术都相当于王冠上的明珠. 在月初的世界移动通信大会上,华为发布了面向5G的新空口,并展出 ...
随机推荐
- poj 1730 Perfect Pth Powers
这个有2种方法. 一种是通过枚举p的值(p的范围是从1-32),这样不会超时,再就是注意下精度用1e-8就可以了,还有要注意负数的处理…… #include<iostream> #incl ...
- 解决Cygwin中文乱码
如下图所示,在执行ping或者cmd.exe命令时,Cygwin出现中文乱码: 解决方案: 在Cygwin终端上右键-->Options…-->Text-->修改Locale 为 z ...
- codeforces D
D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...
- 前端必杀技之Javascript 第1天
学习了javascript基本语法和使用DOM进行简单操作 1.引用javascript方法: a.在<script></script>标签中加入js代码,如: <s ...
- set集合_定长
//set集合的操作 //便利初始化函数 NSSet *set1 = [[NSSet alloc] initWithObjects:@"aa", @&q ...
- 受限波兹曼机导论Introduction to Restricted Boltzmann Machines
Suppose you ask a bunch of users to rate a set of movies on a 0-100 scale. In classical factor analy ...
- Java解压上传zip或rar文件,并解压遍历文件中的html的路径
1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception { HttpSession session = request.getSe ...
- Check if KeyValuePair exists with LINQ's FirstOrDefault
http://stackoverflow.com/questions/793897/check-if-keyvaluepair-exists-with-linqs-firstordefault 问题: ...
- 修练8年C++面向对象程序设计之体会
http://pcedu.pconline.com.cn/empolder/gj/c/0504/609482_1.html
- [HDOJ4738]Caocao's Bridges(双联通分量,割边,tarjan)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 给一张无向图,每一条边都有权值.找一条割边,使得删掉这条边双连通分量数量增加,求权值最小那条. ...