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的新空口,并展出 ...
随机推荐
- selenium实战脚本集——新浪微博发送QQ每日焦点(火狐)
selenium实战脚本集(1)——新浪微博发送QQ每日焦点,乙醇用谷歌实现的,下边是用火狐实现的. 代码如下: # coding = utf-8 from selenium import webdr ...
- 【设计模式六大原则6】开闭原则(Open Close Principle)
定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不 ...
- HDU4758 Walk Through Squares AC自动机&&dp
这道题当时做的时候觉得是数论题,包含两个01串什么的,但是算重复的时候又很蛋疼,赛后听说是字符串,然后就觉得很有可能.昨天队友问到这一题,在学了AC自动机之后就觉得简单了许多.那个时候不懂AC自动机, ...
- spark在eclipse上配置
环境:spark1.4.0,hadoop2.6.0 1.安装好jdk 2.在spark的conf目录下找到spark-env.sh.template,打开,在后面加上 export SCALA_HOM ...
- hdu 1796 How many integers can you find
容斥原理!! 这题首先要去掉=0和>=n的值,然后再使用容斥原理解决 我用的是数组做的…… #include<iostream> #include<stdio.h> #i ...
- Android 设置界面的圆角选项
请先看一个图: 像这种界面的设计,其实是这样的:整体为一个LinearLayout,一个一个排下去,每一个点击项都是一个RelativeLayout(要为其设置clickable为true),分为左右 ...
- hdu1020 Encoding
http://acm.hdu.edu.cn/showproblem.php?pid=1020 过了的就是好孩子........ #include<stdio.h> #include< ...
- Xamarin.Android 入门之:Android的生命周期
一.前言 活动是Android应用程序的基本构建块,他们可以在许多不同的状态存在.当你把一个Android程序置于后台,过一段时间再打开发现之前的数据还存在. 二.活动状态 下面的图表说明了一个活动可 ...
- Intellij IDEA调试功能
public class Demo { public static void f1() { System.out.println("one"); System.out.printl ...
- C++:运算符重载函数之"++"、"--"、"[ ]"、"=="的应用
5.2.5 "++"和"--"的重载 对于前缀方式++ob,可以用运算符函数重载为: ob.operator++() //成员函数重载 或 operator++ ...