Broken Keyboard(悲剧文本)
你有一个键盘,键盘上所有的键都能正常使用,只是Home键和End键有时会自动按下。你并不知道这一情况,而是专心地打稿子,甚至连显示器都没开电源。当你打开显示器之后,展现在你面前的是一段悲剧文本。你的任务是根据给出的键盘上实际输入的内容,计算并输出这段悲剧文本(即显示器上展现的文本)
Input:
一行文本不超过1000000个字符,只包括字母、下划线、字符'['(表示Home键)和字符']'(表示End键盘)。
Output:
一个字符串,即符合题目描述的悲剧文本。
Example:
Input:
This_is_a_[Beijing]_tex
Output:
BeijingThis_is_a__text
___________________________________________________________________________________________________________
问题分析:
该问题最简单的想法是利用数组来保存这些数据,然后用一个变量来保存光标位置,输入一个字符相当于在数组中插入一个字符,但是没插入一个字符将要移动大量的数据,程序的开销会很大。
为了解决这个问题,我们可以利用静态链表解决这个问题
先用一个字符串将每个字符储存起来,s[1-n],对每个s[i]都会对应一个next[i]游标,储存的是下一个结点的下标,同时利用一个curr,表示光标位置,并用last记录最后元素位置,s[0]是一个虚拟字符,用作头结点。
#include<iostream>
#include<string>
using namespace std; const int size=100000+1; int last; //显示屏上的最后一个字符
int cur; //光标位置,总在当前s[i]的左方
char s[size]; //用以储存string int main()
{
int next[size]={0}; //每个s[i]的游标,初始化为0
while(scanf("%s",s+1)==1)
{
//初始化
int n=strlen(s+1); //真正的字符从s[1]开始,s[0]是一个虚拟字符
last=0;
cur=0; //重排next
for(int i=1;i<=n;i++)
{
if(s[i]=='[')
cur=0; //home键
else if(s[i]==']')
cur=last; //end键
else
{
next[i]=next[cur];
next[cur]=i;
if(cur==last)last=i; //当从string的最后插入时,last要+1
cur=i;
}
} //输出
for(int j=next[0];j!=0;j=next[j]) //依据next中指定的顺序输出
cout<<s[j];
cout<<endl;
} return 0;
}
Broken Keyboard(悲剧文本)的更多相关文章
- 破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988)
破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988) 题意描述 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下. ...
- 破损的键盘 (Broken Keyboard)--又名悲剧文本(线性表)
题目: 你有一个破损的键盘.键盘上的所有键都可以正常工作,但有时Home键或者End键会自 动按下.你并不知道键盘存在这一问题,而是专心地打稿子,甚至连显示器都没打开.当你 打开显示器之后, 展现在 ...
- UVa 11988 Broken Keyboard(链表->数组实现)
/*数组形式描述链表:链表不一定要用指针. 题目链接:UVa 11988 Broken Keyboard 题目大意: 小明没有开屏幕输入一个字符串,电脑键盘出现了问题会不定时的录入 home end ...
- UVa 11998 Broken Keyboard (数组模拟链表问题)
题目链接: 传送门 Broken Keyboard #include<bits/stdc++.h> using namespace std; char str[100010]; int m ...
- 1084. Broken Keyboard (20)
On a broken keyboard, some of the keys are worn out. So when you type some sentences, the characters ...
- B - Broken Keyboard (a.k.a. Beiju Text)
Problem B Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well ...
- COJ 0017 20604悲剧文本
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=17 20604悲剧文本 难度级别:B: 运行时间限制:1000ms: 运行空 ...
- uva - Broken Keyboard (a.k.a. Beiju Text)(链表)
11988 - Broken Keyboard (a.k.a. Beiju Text) You’re typing a long text with a broken keyboard. Well i ...
- UVa 11988 - Broken Keyboard (a.k.a. Beiju Text) 题解
刘汝佳的题目,悲剧文本 -_-||| 这里使用vector<string>容器倒置记录数据,然后从后面输出就能够了. 难度就是不知道这种文档究竟哪里是開始输出,故此使用动态管理内存的容器比 ...
随机推荐
- 微信小程序学习总结(1)
1.一个小程序文件最基本包含app.js.app.json.app.wxss和pages文件夹结构,pages中的页面必须要在app.json的pages项进行配置,app.json也提供窗口表现,t ...
- 百度用AR复现朝阳门,野心渐明直指AR平台
近日,支付宝推出基于"AR+LBS"的AR实景红包后,BAT的另一个巨头百度也忍不住展示了自家AR技术.12月22日上午11点,百度邀请了一众媒体朋友前往朝阳门地铁站F口,体验期最 ...
- ggplot2 scale相关设置-坐标转换
ggplot2 scale相关设置-坐标转换 在R中坐标轴转换有多种形式,包括对数转换,平方根转换以及坐标刻度前后进行调换 用到的函数分别有: scale_x_log10(...) scale_y_l ...
- OpenCV常用函数分析
1. 聚类:将拥有最相似属性的数据归为一类. K-means聚类: python调用格式:compacness, labels, centers = cv2.kmeans(data, K, crite ...
- tomcat 配置SSL
本教程使用 JDK 6 和 Tomcat 7,其他版本类似. 基本步骤: 使用 java 创建一个 keystore 文件 配置 Tomcat 以使用该 keystore 文件 测试 配置应用以便使用 ...
- 对于Netty的十一个疑问
[说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...
- CDOJ 1270 Playfair(模拟)
题目链接 Playfair is a kind of substitution cipher.And the encryption role is simple.In general,there ar ...
- Logistic Regression:银行贷款申请审批实例
问题定义 这是一个贷款的审批问题,假设你是一个银行的贷款审批员,现在有客户需要一定额度的贷款,他们填写了个人的信息(信息在datas.txt中给出),你需要根据他们的信息,建立一个分类模型,判断是否可 ...
- Java 字符串比较,String 中的一些方法 == 和 equals 的详解
"==" 是比较的是两个对象的内存地址,而equals方法默认情况下是比较两个对象的内存地址. 1.String str = "hello" 生成的字符串,首 ...
- poj1256(全排列stl)
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;bool cmp ...