随笔分类 -  基本数据结构

摘要:双向链表直接模拟。用一个辅助数组maxSum来维护一下前k项中[1,k]的最大和。因为光标是一格一格的移动,所以每次光标右移的时候动态更新一下即可。时间复杂度O(n)。#include #include #include #include using namespace std;const int MAXN = 1000100;const int INF = 1 pre = NULL; head->next = NULL; node *cur = head; maxSum[0] = -INF; sum[0] = 0; int... 阅读全文
posted @ 2013-09-07 21:58 冰鸮 阅读(301) 评论(0) 推荐(0)
摘要:记录每个节点的出度,叶子节点出度为0,每删掉一个叶子,度数-1,如果一个节点的出度变成0,那么它变成新的叶子。先把所有叶子放到优先队列中。从左往右遍历给定序列,对于root[i],每次取出叶子中编号最小的那个与root[i]相连,并且--degree[ root[i] ],如果degree[ root[i] ]为0,那么把root[i]放入优先队列。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 const int MAXN = 751... 阅读全文
posted @ 2013-08-02 21:42 冰鸮 阅读(273) 评论(0) 推荐(0)
摘要:Manacher算法练笔,O(n)求最长回文子串。参考资料:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://www.felix021.com/blog/read.php?2040后缀数组和拓展KMP也可以求,不过时间复杂度都是O(nlogn)。 1 #include 2 #include 3 4 const int MAXN = 110010; 5 6 char s[MAXN]; 7 char str[ MAXN b ? a : b;19 }20 21 void init()22 {23 int ... 阅读全文
posted @ 2013-05-30 11:13 冰鸮 阅读(182) 评论(0) 推荐(0)
摘要:题意:在不改变表达式的含义的情况下去除多余的括号,输入保证表达式是正确的。WA了整整一天,挺有意思的一题。给两组数据,我是主要就错在这两个地方了:2A-((A+A))A-(A+(A))结果都是A-(A+A)思路(优先级从上往下,一开始没考虑优先级的问题):1.开头的括号可去除2.括号内没有运算符的括号可去除3.括号前不是减号的括号可去除 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 350; 5 6 struct node 7 { 8 char oper; 9 int addr;10 bo.. 阅读全文
posted @ 2013-04-02 12:21 冰鸮 阅读(181) 评论(0) 推荐(0)
摘要:WA!!! 1 //Wrong Answer 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cctype> 6 7 const int MAXN = 260; 8 9 char str[MAXN]; 10 bool vis[MAXN]; 11 int stack[MAXN]; 12 int kuohao[MAXN]; 13 int len; 14 15 void kuo_hao_pei_dui() 16 { 17 int top = 0; 18 阅读全文
posted @ 2012-08-03 21:10 冰鸮 阅读(171) 评论(0) 推荐(0)