题意:模拟文本操作

思路:模拟

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std; #define MAXN 10005
int M;
char cmd[MAXN];
char str1[MAXN],str2[MAXN];
char copyStr[MAXN]; void f(){
int i,j,k,len,len1,len2,lencp;
len=strlen(cmd);//命令长度
len1=len2=;//文本长度
lencp=;//剪贴板长度
int pos=;//光标位置
int mode=;//0 "insert mode",1 "overwrite mode"
int copyState=;//0 "NOTHING",1 "START"
int copyPosition1,copyPosition2;
for(i=;i<len;++i){
if(cmd[i]>='a'&&cmd[i]<='z'){
if(copyState==)copyState=;
if(len1<M){
if(pos==len1){
str1[len1++]=cmd[i];
str1[len1]='\0';
++pos;
}
else{
if(mode==){
for(j=k=;j<pos;++j)str2[k++]=str1[j];
str2[k++]=cmd[i];
for(j=pos;j<len1;++j)str2[k++]=str1[j];
str2[k]='\0';
strcpy(str1,str2);
++len1;
++pos;
//cout<<len1<<endl;
//cout<<str1[0]<<endl;
}
else{
for(j=k=;j<pos;++j)str2[k++]=str1[j];
str2[k++]=cmd[i];
for(j=pos+;j<len1;++j)str2[k++]=str1[j];
str2[k]='\0';
strcpy(str1,str2);
++pos;
}
}
}
}
else if(cmd[i]=='L'){
if(pos>)--pos;
}
else if(cmd[i]=='R'){
if(pos<len1)++pos;
}
else if(cmd[i]=='S'){
if(copyState==)copyState=;
if(mode==)mode=;//变为重写
else mode=;//变为插入
}
else if(cmd[i]=='D'){
if(copyState==){
copyState=;
copyPosition2=pos;
if(copyPosition1<copyPosition2){
for(j=k=;j<copyPosition1;++j)str2[k++]=str1[j];
for(j=copyPosition2;j<len1;++j)str2[k++]=str1[j];
str2[k++]='\0';
strcpy(str1,str2);
len1=len1-(copyPosition2-copyPosition1);
}
else{
for(j=k=;j<copyPosition2;++j)str2[k++]=str1[j];
for(j=copyPosition1;j<len1;++j)str2[k++]=str1[j];
str2[k]='\0';
strcpy(str1,str2);
len1=len1-(copyPosition1-copyPosition2);
}
}
else{
if(pos<len1){
for(j=k=;j<pos;++j)str2[k++]=str1[j];
for(j=pos+;j<len1;++j)str2[k++]=str1[j];
str2[k]='\0';
strcpy(str1,str2);
--len1;
}
}
}
else if(cmd[i]=='B'){
if(copyState==)copyState=;
if(pos>){
for(j=k=;j<pos-;++j)str2[k++]=str1[j];
for(j=pos;j<len1;++j)str2[k++]=str1[j];
str2[k]='\0';
strcpy(str1,str2);
--len1;
--pos;
}
}
else if(cmd[i]=='C'){
if(copyState==){
copyState=;
copyPosition1=pos;
}
else{
copyState=;
copyPosition2=pos;
if(copyPosition1!=copyPosition2){
if(copyPosition1<copyPosition2){
for(j=copyPosition1,k=;j<copyPosition2;++j)
copyStr[k++]=str1[j];
copyStr[k]='\0';
lencp=copyPosition2-copyPosition1;
}
else{
for(j=copyPosition2,k=;j<copyPosition1;++j)
copyStr[k++]=str1[j];
copyStr[k]='\0';
lencp=copyPosition1-copyPosition2;
}
}
else{
memset(copyStr,'\0',sizeof(copyStr));
lencp=;
}
}
}
else if(cmd[i]=='V'){
if(lencp>){
if(mode==){
if(len1+lencp<=M){
for(j=k=;j<pos;++j)str2[k++]=str1[j];
for(j=;j<lencp;++j)str2[k++]=copyStr[j];
for(j=pos;j<len1;++j)str2[k++]=str1[j];
str2[k]='\0';
strcpy(str1,str2);
len1=len1+lencp;
pos=pos+lencp;
}
}
else{
if(pos+lencp<=M){
for(j=k=;j<pos;++j)str2[k++]=str1[j];
for(j=;j<lencp;++j)str2[k++]=copyStr[j];
for(j=pos+lencp;j<len1;++j)str2[k++]=str1[j];
str2[k]='\0';
strcpy(str1,str2);
if(pos+lencp>len1)len1=pos+lencp;
pos=pos+lencp;
}
}
}
}
}
} int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&M);
//M=100;
scanf("%s",cmd);
f();
if(str1[])printf("%s\n",str1);
else printf("NOTHING\n");
}
return ;
}

hiho Mission Impossible 6(模拟 未提交验证。。)的更多相关文章

  1. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

  2. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  3. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 B Mission Impossible 6

    #1228 : Mission Impossible 6 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You must have seen the very famou ...

  4. AngularJS系列:表单全解(表单验证,radio必选,三级联动,check绑定,form提交验证)

    一.查看$scope -->寻找Form控制变量的位置 Form控制变量 格式:form的name属性.input的name属性.$... formName.inputField.$pristi ...

  5. .NET分布式事务未提交造成6107错误或系统被挂起的问题分析定位

    问题描述: 系统中多个功能不定期出现“Unable to get error message (6107) (0).”错误,即分布式事务超时,但报出错误的部分功能根本没有使用分布式事务. 原因分析: ...

  6. Mission Impossible 6

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

  7. SQL Server中的事务与其隔离级别之脏读, 未提交读,不可重复读和幻读

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  8. 2015 ACM-ICPC国际大学生程序设计竞赛北京赛区网络赛 1002 Mission Impossible 6

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

  9. SVN本地代码未提交而被覆盖

    本地代码未提交而不小心被覆盖了,肿么办... 到回收站找到你的文件 xxx.mine,代码就可以找回来了.如果回收站没有了,那就没办法了. ---- 失而复得的感觉真好!

随机推荐

  1. 集合-Vector

    Vector中的操作是线程安全的. public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCa ...

  2. POJ 3468 线段树 成段更新 懒惰标记

    A Simple Problem with Integers Time Limit:5000MS   Memory Limit:131072K Case Time Limit:2000MS Descr ...

  3. (3)Swing常用组件

    JTextField-文本框 继承自javax.swing.text.JTextComponent类

  4. Codeforces Round #310 (Div. 2)简洁题解

    A:原来是大水题,我还想去优化.. 结果是abs(num('0')-num('1')); num表示一个符号的个数; B:暴力模拟即可,每次判断是否能构造出答案. C:俄罗斯套娃,套套套,捉鸡的E文. ...

  5. 什么场景应该用 MongoDB ?

    摘要: 月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题,有近5000人关注了该话题讨论,这里就 MongoDB 的使用场景做个简单的总结,谈谈什么场景该用 Mo ...

  6. js中有包装类,java中也有包装类

    new Number() vs Number() What is the difference between new Number() and Number()? I get that new Nu ...

  7. 怎样改动X-code中的字体大小、颜色

  8. memcached优化方法

    工作原理     基本概念:slab,page.chunk.     slab,是一个逻辑概念. 它是在启动memcached实例的时候预处理好的,每一个slab相应一个chunk size.也就是说 ...

  9. javaweb 中的过滤器 包装器

    过滤器要做的事情: 请求过滤器:完毕安全检查,又一次格式化请求首部或体.建立请求审计或日志 响应过滤器:     压缩响应流,追加或改动响应流创建一个全然不同的响应. 过滤器和servlet三个相似地 ...

  10. electron 开发拆坑总结

    electron 总结 前言 有一个web项目需要用客户端来包装一下 项目的主要业务都在服务器上 所以项目的大多数功能都用url 地址来访问: 客户端登陆界面在本地 打包客户端的本地登陆界面 做为登陆 ...