单链表--uva 11988 Broken Keyboard 从入门到放弃
来源:互联网 发布:程序怎样烧进单片机 编辑:程序博客网 时间:2024/05/22 04:25
分析:
/*思路:用s数组存储字符串;用光标指定元素位置,下一个元素插入时在光标位置后面;用next数组记录指向的下一个元素,在数组上构建链表关系;将光标在字符串中移动,模拟输出结果构建链表关系,最后根据链表将数据输出。注意:链表一般有个头节点,可以将s[0]空出来对应头节点。*/代码:
#include <cstdio>#include <cstdlib>#include <iostream>#include <stack>#include <queue>#include <algorithm>#include <cstring>#include <string>#include <cmath>#include <vector>#include <bitset>#include <list>#include <sstream>#include <set>#include <functional>using namespace std;#define INF 0x3f3f3f3fconst int maxn = 1e5+5;char s[maxn];int Next[maxn];int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifwhile(scanf("%s",s+1) != EOF) {int cur = 0,last = 0;Next[0] = -1;//尾节点的next默认值,可以写成-1,0,指针的话用的是null int n = strlen(s+1); for (int i = 1; i <= n; ++i){ if(s[i] == '[') cur = 0; else if(s[i] == ']') cur = last; else{//根据光标位置插入元素 Next[i] = Next[cur];//插入时元素连接光标元素后的链接 Next[cur] = i;//光标元素连接插入元素 if(cur == last) last = i;//正常插入时cur,last相等,插入后右移 cur = i;//光标右移,更新位置 } } for (int i = Next[0]; i != -1; i = Next[i]) printf("%c",s[i]); printf("\n");}}
参考:算法竞赛入门经典(刘大爷)第六章
ps:刘大爷的代码真简洁,果然你大爷还是你大爷。
阅读全文
0 0
- 单链表--uva 11988 Broken Keyboard 从入门到放弃
- Uva 11988 Broken Keyboard
- UVa 11988 ------ Broken Keyboard
- uva 11988 Broken keyboard
- UVA 11988(p143)----Broken Keyboard
- UVA 11988 Broken Keyboard 链表
- UVA 11988 Broken Keyboard 【链表】
- UVA 11988 Broken Keyboard (链表)
- uva 11988 - Broken Keyboard (模拟)
- UVa 11988 Broken Keyboard(模拟链表)
- UVA 11988 Broken Keyboard (Beiju Text)
- Broken Keyboard 破损键盘 UVA 11988
- ACM篇:Uva 11988-- Broken Keyboard
- Freemarker 从入门到放弃
- kmp从入门到放弃
- Dagger2从入门到放弃
- 推送 从入门到放弃
- 推送 从入门到放弃
- python爬取必应的壁纸
- 不错的linux下通用的java程序启动脚本(转载)
- 程序员必须知道的十大基础实用算法及其讲解
- 自己总结的web前端知识体系大全【欢迎补充】
- 差值多项式的余项定理
- 单链表--uva 11988 Broken Keyboard 从入门到放弃
- tcp/ip学习笔记--第22章 TCP persist timer
- 置换加密法
- 链路层常见报文格式及长度
- JVM虚拟机有内存泄露怎么解决
- 网络编程是什么
- 数据算法-hadoop7 购物车分析
- 我的java自学经历
- Apriori