UVa11988 Broken Keyboard(练习链表使用)
向量和数组的优势是可以随机的存取元素和在末尾添加删除元素,而当插入元素时,需要移动大量的数据,消耗大量的时间。而链表的优势是可以在O(1)删除和插入数据。所以在频繁移动元素时,可以使用链表。
分析:如果用一个数组来保存,题目中的文本随着光标位置的移动需不断的插入字符,这样会导致大量字符移动问题。解决方案是采用链表,将字符串保存在buf[1...n]中,然后用next[i]表示下标为i的字符的下一个位置的下标(链表不一定用指针实现)。为了方便起见,用一个虚拟的next[0]指向显示屏最右边的字符下标。再用cur表示光标的位置,即为光标在buf[cur]的右边.cur==0说明光标在显示屏的最左边。还用last表示显示屏最右边的字符。
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include<string.h>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 5; char buf[maxn];
int Next[maxn]; int main(){
int cur, last,n;
while (scanf("%s", buf+1)!=EOF){
n = strlen(buf + 1);
cur = last = 0;
for (int i = 1; i <= n; i++){
if (buf[i] == '[')cur = 0; //house键
else if (buf[i] == ']')cur = last; //end键
else{
Next[i] = Next[cur]; //字符i的下一个位置为cur的下一个位置
Next[cur] = i; //curr的下一个位置为i
//更新cur和last
if (cur == last)last = i; //cur等于i表示光标在显示屏最后一个字符
cur = i; //移动光标
}
}
Next[last] = 0; //结束位置
for (int i = Next[0]; i != 0; i = Next[i])
printf("%c", buf[i]);
printf("\n");
}
return 0;
}
UVa11988 Broken Keyboard(练习链表使用)的更多相关文章
- UVa 11988 Broken Keyboard(链表->数组实现)
/*数组形式描述链表:链表不一定要用指针. 题目链接:UVa 11988 Broken Keyboard 题目大意: 小明没有开屏幕输入一个字符串,电脑键盘出现了问题会不定时的录入 home end ...
- UVA-11988 Broken Keyboard (a.k.a. Beiju Text) (链表 或 递归)
题目大意:将一个字符串改变顺序后输出.遇到“[”就将后面内容拿到最前面输出,遇到“]”就将后面的内容拿到最后面输出. 题目分析:用nxt[i]数组表示i后面的字符的下标,实际上就是以字符i为头建立链表 ...
- UVA11988 Broken Keyboard (a.k.a. Beiju Text)【数组模拟链表】
参考:https://blog.csdn.net/lianai911/article/details/41831645 #include <iostream> #include <c ...
- UVa11988 Broken Keyboard 损坏的键盘【list】
题目链接:https://vjudge.net/problem/UVA-11988 题目大意: 键盘的home键和end键出现了问题. 在输入一段文本时,home键或end键可能会自动被按下,home ...
- UVA11988 Broken KeyBoard
链表的思想很简单,要做到活用也不难.一般我是这样做得,从实际问题出发,先高度的概括符不符合链表的特点.能不能用链表简单解决.接着,就是编码.链表编码要理清细节性思路,最好是简单的画下图,正如改题的链表 ...
- Uva 11988 Broken Keyboard STL+链表
两种方法,直接上代码 STL标准模板库 #include <iostream> #include <list> #include <algorithm> #incl ...
- UVa11988 Broken Keyboard (a.k.a. Beiju Text)
题目复制太麻烦了,甩个链接 http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18693 直接模拟光标操作时间复杂度较高,所以用链 ...
- UVA 11988 Broken Keyboard (链表)
简单题,题目要求显然是很多次插入,所以是链表. 插入两个语句,nxt[i] = nxt[u] 表示 i结点指向u的后继, nxt[u] = i表示把u的后继设成i. 设置一个头结点,指向一个不存在的结 ...
- UVa 11998 Broken Keyboard (数组模拟链表问题)
题目链接: 传送门 Broken Keyboard #include<bits/stdc++.h> using namespace std; char str[100010]; int m ...
随机推荐
- 获取任意网站的图标,标题栏logo,网站logo
https://www.hao123.com/favicon.ico 网站换成你想要的 大多数都可以
- jQuery静态分页功能
分页功能在做项目的过程中是常常用到的,下面是我常用的一款分页效果: 1.分页的CSS样式(page.css) #setpage { margin: 15px auto; text-align: cen ...
- 【bzoj4884】[Lydsy2017年5月月赛]太空猫 dp
原文地址:http://www.cnblogs.com/GXZlegend/p/6825431.html 题目描述 太空猫(SpaceCat)是一款画面精致.玩法有趣的休闲游戏,你需要控制一只坐在迷你 ...
- JS获取照片拍摄的角度属性,用于旋转控制
我工作十余年,从负责一个模块,到负责一个产品,再到负责整个支付平台的架构设计,包括业务架构.产品架构到应用架构,再到技术架构,是一个从点到面逐渐转型的过程,同样是个“自相似”的现象,我一开始写博客,再 ...
- Myeclipse中生成subscription code的代码
//代码如下: package com.qls.AddingMethodsToAnEnum; import java.io.*; public class MyEclipseGen { private ...
- Pandas之DataFrame——Part 1
''' [课程2.] Pandas数据结构Dataframe:基本概念及创建 "二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值.字符 ...
- 洛谷P3112 [USACO14DEC]后卫马克Guard Mark
题目描述 Farmer John and his herd are playing frisbee. Bessie throws the frisbee down the field, but it' ...
- 百度之星初赛(A)——T2
数据分割 小w来到百度之星的赛场上,准备开始实现一个程序自动分析系统. 这个程序接受一些形如x_i = x_jxi=xj 或 x_i \neq x_jxi≠xj 的相等/不等约 ...
- [ CodeVS冲杯之路 ] P1011
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1011/ 一开始以为是道数学题,列出了一个公式 后面验证,发现只能推出第一次,后面的还需要迭代,推翻这个公式 又去瞟了一 ...
- oracle odbc 驱动安装(不安装oracle客户端)
1.下载odbc驱动 需要下载两个东西 instantclient-basiclite-nt-12.1.0.1.0.zip instantclient-odbc-nt-12.1.0.1.0.zip 由 ...