上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页
摘要: 多串的LCS,注意要利用拓扑序更新suf的len。我用min,max,三目会超时,所以都改成了if,else#pragma warning(disable:4996)#include#include#include#include#include#include#define maxn 100050using namespace std;struct State{ State *suf, *go[26]; int val, len[2]; State() :suf(0), val(0){ memset(go, 0, sizeof(go)); memset(len, 0, sizeof(le.. 阅读全文
posted @ 2014-02-16 20:57 chanme 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 用后缀自动机求两个长串的最长公共子串,效果拔群。多样例的时候memset要去掉。解题思路就是跟CLJ的一模一样啦。#pragma warning(disable:4996)#include#include#include#include#include#include#define maxn 250050using namespace std;struct State{ State *suf, *go[26]; int val; State() :suf(0), val(0){ memset(go, 0, sizeof(go)); }}*root, *last;State statePool. 阅读全文
posted @ 2014-02-16 17:17 chanme 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 人生第一道后缀自动机,总是值得纪念的嘛。。后缀自动机学了很久很久,先是看CJL的论文,看懂了很多概念,关于right集,关于pre,关于自动机的术语,关于为什么它是线性的结点,线性的连边。许多铺垫的理论似懂非懂。然后看了下自动机的构造发现代码倒是挺简单,但是理解原理却是十分的困难,最后在网上找到一篇带例子的讲解帖子,我感觉算是能够说服我的吧放个链接:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html本题也是CLJ论文里的题,关键是如何求right集的大小,这里的求right集的大小我给个个人的理解,首先是按拓扑序吧,那三行for就有点像基数 阅读全文
posted @ 2014-02-16 00:26 chanme 阅读(768) 评论(0) 推荐(0) 编辑
摘要: 最近在学习字符串的知识,在字符串上我跟大一的时候是没什么区别的,所以恶补了很多基础的算法,今天补了一下字符串哈希,看的是大一新生的课件学的,以前觉得字符串哈希无非就是跟普通的哈希没什么区别,倒也没觉得有什么特别大的用处,敲一敲才发现其实讲究还是比较多的。哈希冲突是常有的事,换一下mod,换一下进制数才有可能过,另外一种说法是用两个互质的量做hash,如果两个都相等的话那冲突就会少很多,这个倒没有做过多大的尝试,侥幸地过了一下这道题#pragma warning(disable:4996)#include#include#include#include#include#include#defin 阅读全文
posted @ 2014-02-06 14:19 chanme 阅读(340) 评论(0) 推荐(0) 编辑
摘要: POJ上的,ZOJ上的OJ的最长回文子串数据量太大,用后缀数组的方法非常吃力,所以只能挑个数据量小点的试下,真要做可能还是得用manacher。贴一下代码两个小错,一个是没弄懂string类的substr的用法是S.substr(i,len)从i开始的长度为len的一段。另外一个是RMQ的时候,询问rk[i],rk[j]的最长前缀应该是等效于求lcp[rk[i]] lcp[rk[j]-1]这一段,这个要在询问的时候注意一下。#include#include#include#include#include#include#include#define maxn 1000050using name 阅读全文
posted @ 2014-02-03 01:25 chanme 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 回顾一下一些基础算法,Sparse Table有种dp的感觉,写起来有点棘手吧,主要是因为下标的问题,贴一记代码,等下写一个非递归的线段树试试。#pragma warning(disable:4996)#include#include#include#include#include#include#include#define maxn 50000#define max_logn 20using namespace std;int dmin[maxn+20][max_logn];int dmax[maxn+20][max_logn];int a[maxn+50];int n,m;int mai 阅读全文
posted @ 2014-02-02 23:49 chanme 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 学后缀数组后的一道裸题。先来讲讲收获,作为字符串初学者,后缀数组也是刚刚在学,所幸的是有一篇好的论文《后缀数组--处理字符串的有力工具》by 罗穗骞,里面非常详尽地介绍了有关后缀数组的概念,也就是sa[i]和rk[i]表示的是什么。理解了它们互为逆运算后就不难理解sa[rk[i]]=i rk[sa[i]]=i,所以知道其中一个就可以知道另外一个,然后学习了一下后缀数组中的倍增算法构建,虽然效率比不上线性的算法,但是胜在好理解,好写。当然大神的代码我是不怎么懂,我就翻阅了另一本书《挑战程序设计竞赛》里的代码,总之就是两个材料一起看,搞懂了什么是高度数组lcp, 也知道了h[i]>=h[i- 阅读全文
posted @ 2014-02-02 21:47 chanme 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 每次第一道模板题都是非常有意义的,考试前夕费尽心思学了KMP,学了Trie树,就是为了学这个做铺垫的,这道题时著名的AC自动机模板题。个人理解AC自动机就是在一棵Trie树上求失配指针,然后实现了多模匹配。只需遍历一次文本串就能求出所有的内容。在下面的query代码里,因为不能重复计算相同的模板串,所以每次加上后temp->count=-1,表示已经算过,在while循环里temp->count!=-1的时候才进行失配其实是有意义的,当temp->count==-1时说明已经沿着失配指针匹配过一次了,所以就没有必要再往上跑一次。假如每次匹配完我令temp->count= 阅读全文
posted @ 2014-01-24 21:37 chanme 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 寒假非常有幸有机会给大一新生讲了两次课,贪心和dp。深深觉得要理解一个东西再也没有比能够讲给别人听更好的了,当你以让别人听懂,让别人理解为目的去学习,去准备的时候,东西会看的更加入脑,更加深刻。dp是我尤其不懂的,如果不是这次备课,我才不会去深入的学习01背包和完全背包,还有多重背包,这些都是我去年大一听课的时候没听懂的,所以当我有机会去给别人讲的时候,我会更加认真地去学习,去准备一下课件,希望让别人能够理解,虽然不知道13级听懂的有多少,但是我搞的很清楚是真的。 去年我听背包的时候主要是没懂,为什么01背包和完全背包在压缩了第一维之后,一个是由大到小转移,一个是由小到大转移。但看了... 阅读全文
posted @ 2014-01-24 18:25 chanme 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 昨天打了今年最后一场CF,感觉既然开了博客,就写点年度总结什么的吧,可能以后看到会觉得很有意思吧。 不知不觉就过了一年啦~想起去年在小北的麦当劳和女朋友倒数(就是看着手机的时钟。。),一年过的还真的是挺快的呢。博客题目就取自CF最后一场的题目吧,最后一场切了三道水题,还有一道跪了,居然都涨了100多,貌似是CF rating的小巅峰啦,如果下次运气好点的话感觉还能变个颜色什么的。 回忆一下今年的ACM历程吧,去年的差不多这个时候的前几个月打了下选拔赛,那个时候真的比较青涩呢,进去猛地刷的都是YY题,好多好多的都不会。后来也进了集训队,集训队寒假安排了一些课程,课程主要介绍了一些常用的算... 阅读全文
posted @ 2014-01-01 00:29 chanme 阅读(245) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页