自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 (考前水题) UVa 11488 Trie树

#include #include #include #include using namespace std; #define N 50000*200+5 #define SIG 2 struct Trie { int ch[N][SIG], len[N], visit[N]; int sz; void reset() { sz=1;

2013-10-31 22:19:07 520

原创 (考前水题)UVa 12299 线段树

#include #include #include #include using namespace std; #define N 400000+5 #define inf 100000+5 struct node { int L,R; int Min; }st[N]; int a[N]; void build_tree(int p,int l,int r) {

2013-10-31 21:12:18 586

原创 (考前水题)LA2191 裸树状数组

#include #include #include using namespace std; #define N 200000+5 int a[N], js[N], c[N], lowbit[N]; int n; void init() { for (int i=1;i<=N-5;i++) lowbit[i]= i&(-i); } void add(int x

2013-10-31 19:31:24 534

原创 LA4513 后缀数组/字符串hash

对于height的维护还是不太理解。 后缀数组裸题: #include #include #include #include using namespace std; #define maxn 80000 int s[maxn]; int sa[maxn]; int n, m; int t[maxn], t2[maxn], c[maxn]; int Rank[maxn],he

2013-10-27 15:16:54 519

原创 UVa11107 后缀数组

这题由于这周六考大物,整整拖了一周时间,一开始写的我估计也没什么大问题,细节比较多: 1.字符数组直接写成int数组,并且最后一位s[n]=0,来维护sa数组,height数组(记录LCS),rank数组; 2.二分的技巧,也看到了很多; 3.看来刘汝佳的书写的也不是很完美,对于后缀数组虽然给了标程,但是具体怎么使用,要注意那些细节并没有给出提示,好在还有一片国家队论文可以看,论文里讲的就比

2013-10-27 14:19:25 453

原创 Treap LA5031

动态儿插排序树的一种常用实现算法:Treap。 从树根向下递归时当然都是一般的BST方式,左小又大,一步步向下;而向上回溯时却是采用维护最大堆的方式,同时为了维护二叉排序树的基本特性,每次不是直接交换节点,而是旋转; 从基本的Treap中为了解题,衍生出了名次树,每个节点用一个数据记录该子树所有节点数,可以完成查询第K大数(第K小数),找任给的x在当前树中的名次; 注意maintain的实现

2013-10-15 21:15:37 586

原创 BST 运用STL UVa11020

multise内部结构就是一个Binary Search Tree,要重载 #include #include using namespace std; struct Point{ int a,b; //Point(int a1=0,int b1=0):a(a1),b(b1){} bool operator< (const Point& rhs) const {

2013-10-13 11:09:06 451

原创 AC自动机 UVa11019

这题的AC自动机不用维护last数组,找到每个左上角的匹配行数,如果恰好等于x,那么刚好就是一个完整的二维匹配。 但是,不明白为什么一直WA啊,看了别人的代码感觉都差不多啊,我也考虑了模板串多行相同的情况啊,郁闷了。 #include #include #include #include #include using namespace std; #define SIG 26

2013-10-13 10:47:34 425

原创 AC自动机 UVa11468

在给定的字符下,任意搭配,不含有任一模板串的概率,抽象的最终问题是:在Trie图上走L步,保证每一步不是单词节点,用记忆化搜索,这是对节点是否为单词节点的标记是match[u] |= match[f[u]],不再需要维护val[u]和last[u]。 还是稍微有些不好理解的。 #include #include #include #include #include using n

2013-10-12 09:18:17 453

原创 AC自动机 LA4670

这题调了好久: 问题1:Trie图的节点数给小了,应该是150*70,我给的是150*26,少脑子了; 问题2:就是数组开小了,老是提交超时,导致开始怀疑算法的复杂度有问题; 另外,LA上这题的数据非常弱,非常非常弱。 AC自动机的本质:先把模板串建成Trie树,然后根据KMP的思想用BFS建Trie图,说穿了就是维护两个数组,f[u]往回找,last[u]指向其他较短模板串的节点

2013-10-09 23:00:04 455

原创 KMP LA3026

KMP的精髓在于fail数组记录0到i-1的后缀跟前缀的最长匹配(当然本身匹配是忽略的),其实具体实现的代码还是比较抽象的,不是太好理解; 这题揭示了KMP的fail数组的一个性质,如果f[i]>0 && i%(i-f[i])==0,那么模式串本身就是一个有循环节的字符串。 #include #include #include #include #include using n

2013-10-04 23:03:34 539

原创 Trie Uva11732

不懂为什么老是submission error,也不说明白具体哪错了,至今未过。。 #include #include #include #include #include using namespace std; #define MAXNODE 40005 //#define MAXNODE 4000005 #define SIG 62 #define MAXL 1005 s

2013-10-04 20:30:39 421

原创 Trie LA3942

Trie的精髓在于利用了公共前缀,生成一个关系树,一条边代表一个字符,节点的val值来记录是否为单词结尾; 连续交了三遍Runtime Error,一个是Trie的节点数组开小了,总共有40万个节点,然后关键问题是我的d数组维护,我写的是d[state] = (d[state]+d[state+len[u]]) % MOD;不知道和现在的这个d[state] = (d[state]+d[i])

2013-10-04 14:24:44 528

原创 线段树UVa11992

要建多个线段树,有两个基本操作,set和add,优先级上,set比add高,注意关系; query里还是要用到pushdown,有pushdown的地方就一定要有maintain,两者有依存关系; 但是pushdown之后,在哪里,在什么位置maintain,不太明白; 写完了,好多错误,,maintain对于子节点和中间节点是有区别的,,query是需要pushdown的; 即便如此还是

2013-10-04 01:52:47 502

原创 线段树 LA3938

又卡住了,写了前面一半,后面一半想不明白了。。 #include #include #include #include using namespace std; #define N 1000005 struct ans{ int x,y; ans(int x1=0,y1=0):x(x1),y(y1){} }; struct node { int L,R;

2013-10-03 01:13:07 756

原创 RMQ问题 UVa 11235

RMQ问题:range minimum query。还是利用二分的性质。初始化复杂度是nlogn,查询是logn,本题要先编码,然后再利用RMQ的方法来做。 #include #include #include #include using namespace std; #define N 100005 #define LOGN 30 int Count[N], num[N],

2013-10-02 23:25:42 526

原创 树状数组BITLA 4329

我去,数组最大值 跟 数据最大值 没搞清楚,WA了好多次都看不出来错在哪。这种错误一旦犯了,小数据根本看不不出来。。 #include #include #include #include #include using namespace std; #define N 100005 int lowbit[N], low[N], a[N]; long long c[N], n;

2013-10-02 11:43:16 509

原创 并查集LA3027

基本题,每次把一个根加到另一棵树的结点上,距离有定义,每次询问某结点到根的距离。 #include #include #include #include using namespace std; #define N 20005 int pa[N],dis[N]; char s[2]; int n; void init() { for(int i=1;i<=n;i++){

2013-10-02 10:30:20 565

原创 并查集 LA 3644

基本题。 #include #include #include #include using namespace std; #define N 100005 int pa[N]; int findset(int x) { if (pa[x]==x) return x; pa[x]=findset(pa[x]); return pa[x]; } void

2013-10-01 23:00:35 486

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除