本题可以在洛谷评测,但需要绑定账号

首先解释一下:Home键的作用是把光标移动,End键的作用是返回上次按Home键的地方

考虑朴素做法:输入为[时下一次插入在数组最前端,然后元素整体向后;同时令 last 变量记录上次离开的位置。如果输入为 ] 则令 当前光标 = last。

时间复杂度 \(\mathcal{O(}\text{TLE})\) (大雾)

考虑链表的做法。设字符串为 \(s\),设 \(nxt_i\) 表示 \(s_i\) 右边的位置(即 \(i+1\) )。那么假装屏幕最左边有一个虚拟字符 0 ,那么初始化 \(nxt_0=0\) ,然后如果输入为 [ 则令当前鼠标位置 \(cur=0\) ,如果输入为 ] ,则令 \(cur =\) 上一次离开的位置 \(last\) 。如果是正常字符,则更改链表 \(nxt_i\) 和 \(nxt_{cur}\) 的值,然后如果当前光标等于上一次离开的位置,则更新 \(last\) ,然后更新 cur 。具体见参考代码。

#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; char s[100000001];
int cur,last,nxt[1000001]; int main()
{
while(cin>>s+1)
{
int len=strlen(s+1);
cur=last=0;
nxt[0]=0; for(int i=1;i<=len;i++)
{
if(s[i]=='[') cur=0;
else if(s[i]==']') cur=last;
else
{
nxt[i]=nxt[cur]; //当前字符的右边是当前光标的右边
nxt[cur]=i; //当前光标的右边是当前字符所在的位置
if(cur==last) last=i; //更新last
cur=i; //更新cur
}
} for(int i=nxt[0];i;i=nxt[i]) //遍历链表,相当于每次“跳”到当前链表位置的右边在数组中的位置
cout<<s[i];
puts(""); } return 0;
}

能过。

【做题笔记】UVA11988破损的键盘的更多相关文章

  1. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  2. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  3. SDOI2017 R1做题笔记

    SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30

  4. SDOI2014 R1做题笔记

    SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(

  5. SDOI2016 R1做题笔记

    SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...

  6. LCT做题笔记

    最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...

  7. java做题笔记

    java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...

  8. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

  9. PKUWC/SC 做题笔记

    去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...

  10. POI做题笔记

    POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...

随机推荐

  1. Android_AsyncTask异步类

    ·AsyncTask是一个轻量级的异步抽象类 ·Android程序刚启动时,会同时启动一个像一个的主线程,这个主线程主要负责处理与UI有关的事件,有时也被称为UI线程,Android app中必须遵循 ...

  2. layui radio手动选择失效的问题

    var radio_types = document.getElementsByName("radio_type"); for (var i = 0; i < radio_t ...

  3. Centos下安装Oracle12c

    总结一次安装oracle的折腾血泪史环境准备 centos7 虚拟机VMware Workstation Pro14 IP:192.168.245.128(根据实际情况) 4G物理内存,8G虚拟内存, ...

  4. 已经安装了 AccessDatabaseEngine.exe,还是报错

    标题: SQL Server 导入和导出向导 ------------------------------ 操作无法完成. ------------------------------ 其他信息: 未 ...

  5. Wannafly Camp 2020 Day 2E 阔力梯的树 - set,启发式合并

    搞一波启发式合并即可 #include <bits/stdc++.h> using namespace std; #define int long long #define iter se ...

  6. [P4450] 双亲数 - 莫比乌斯反演,整除分块

    模板题-- \[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=k] = \sum\limits_{i=1}^a\sum\limits_{j=1}^b[k|i ...

  7. loj6278 数列分块入门题2

    题意:支持区间加,询问区间中元素排名 维护两个域.一个域维护原序列,一个域维护快内排序序列. 每次修改后更新快内排序序列. 修改时O(sqrt(n)log(sqrt(n))) 询问时O(sqrt(n) ...

  8. Java基本语法--程序流程控制

    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块.流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构.分支结构.循环结构.本篇博客主要是对 ...

  9. 页面内容不满屏幕高度时,footer底部显示

    底部高度固定的情况下 <style> body,html{ height: 100%; margin: 0; } .content{ min-height: 100%; padding-b ...

  10. mybatis-plus - TableInfo

    在前面 的 inject() 方法中, 调用了一个 TableInfoHelper.initTableInfo(builderAssistant, modelClass) 方法, 来获取 表信息: T ...