题意:模拟文本操作

思路:模拟

#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. 更全的bootstrap教程连接

    更全的bootstrap教程: http://www.jb51.net/article/84087.htm

  2. Python入门--8--字符串

    一.创建.修改字符串 str1='呆呆 槑槑 木木 林林' str1[1] #输出呆 str1[2] #输出' ',也就是空值 str1=str[:5]+'插入乖呆 '+str1[5:] #修改字符串 ...

  3. android 完美退出应用程序。

    Android 程序在点击回退键时,如果只有一个activity,调用finish()方法就能退出界面,如果有多个界面,在调用该方法时,只会销毁当前的activity,显示栈顶的其它activity, ...

  4. go--常量&运算符

    常量const 1.常量声明: const ( a = b c ) fmt.Println(a) fmt.Println(b) fmt.Println(c)// ======222 ====: 2.并 ...

  5. oracle分区表备份恢复

    https://blog.csdn.net/jc_benben/article/details/51546815

  6. npm 安装vue-cli

    TIP:win10下安装,使用管理员身份进行,否则会有权限限制. 1,安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(n ...

  7. BZOJ 1090 字符串折叠(Hash + DP)

    题目链接 字符串折叠 区间DP.$f[l][r]$为字符串在区间l到r的最小值 正常情况下 $f[l][r] = min(f[l][r], f[l][l+k-1]+f[l+k][r]);$ 当$l$到 ...

  8. 让win7任务条上的文件夹打开是c,d,e,f而不是库

    如果资源管理器是打开的,则右键点击资源管理器的图标,在跳出的菜单中,右键点击“Windows资源管理器”,选择“属性”. 在“快捷方式’选项卡,“目标”一栏,默认的是 %windir%\explore ...

  9. UNIDAC如何驱动MSSQL2000

    UNIDAC如何驱动MSSQL2000 如下图,PROVIDER必须设置为PRSQL.默认的PRAUTO,如果操作系统是XP可以,如果是WIN7以上的,不可以. 原因是MSSQL NATIVE 11已 ...

  10. 第三讲_图像特征与描述Image Feature Descriptor

    第三讲_图像特征与描述Image Feature Descriptor 概要 特征提取方法 直方图 对图片数据/特征分布的一种统计:对不同量进行直方图统计:可以表示灰度,颜色,梯度,边缘,形状,纹理, ...