上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 25 下一页

bzoj 1030 ac自动机

摘要: 比较容易看出来先建立ac自动机,然后在自动机上做DP,设w[0..1][i][j]为当前不包括/包括字典中的字符串,当前在自动机中走到第i个节点,完成的文本的长度为j的方案数,那么比较容易的转移w[i|j->child->cnt][j->child][k+1]+=w[i][j][k]。 /**************************************************************Problem: 1030User: BLADEVILLanguage: C++Result: AcceptedTime:200 msMemory:25596 kb** 阅读全文
posted @ 2014-03-06 08:51 BLADEVIL 阅读(569) 评论(0) 推荐(0) 编辑

bzoj 2434 fail tree+dfs序

摘要: 首先比较明显的是我们可以将字符串组建立ac自动机,那么对于询问s1字符串在s2字符串中出现的次数,就是在以s1结尾为根的fail tree中,子树有多少个节点是s2的节点,这样我们处理fail tree的dfs序,然后用BIT维护,但是如果只是在线处理询问的话会tle,因为每个询问需要将节点的每一位在BIT中都修改,那么我们就浪费了好多性质,因为对于好多字符串拥有较长的LCP,那么我们可以模拟建trie的过程在自动机上跑,每遇到一个添加的字符,就解决所有询问为某字符串在该字符串中出现的次数,这样就可以了。/******************************************.. 阅读全文
posted @ 2014-03-04 17:41 BLADEVIL 阅读(500) 评论(0) 推荐(0) 编辑

bzoj 3035 二分答案+二分图最大匹配

摘要: 大原来做的一道题,偷懒直接粘的原来的程序 http://www.cnblogs.com/BLADEVIL/p/3433520.html/**************************************************************Problem: 3035User: BLADEVILLanguage: PascalResult: AcceptedTime:240 msMemory:4216 kb****************************************************************///By BLADEVILvarn,... 阅读全文
posted @ 2014-02-28 21:44 BLADEVIL 阅读(273) 评论(0) 推荐(0) 编辑

bzoj 1058 bst

摘要: 因为是数列的维护,所以我们可以考虑用splay来维护,每次在x插入的时候就在x+1前面插入就行了,然后用bst来维护两问的答案,但是应该会tle。我们来考虑这个问题的性质,首先因为这个数列没有删除操作,所以每个数插入进去之后就不会出来了,换句话说,就是假设insert(x,y)那么y这个值和前面的那个数可以更新相邻差值的答案,且这个不会因为其他的插入操作而使得这个差值消失(消失值类似(x,y)插入,那么之前在x处插入的点与x+1的差值会消失),所以我们只需要存储每个位置最后插入的数,那么对于一个插入(x,y)我们只需要判断x位置是否插入过值然后讨论就行了。那么对于另一个全局差值的更新我们只.. 阅读全文
posted @ 2014-02-28 21:33 BLADEVIL 阅读(345) 评论(0) 推荐(0) 编辑

bzoj 1093 缩点+DP

摘要: 首先比较明显的是如果存在一个半连通子图,我们将其中的环缩成点,那么该图仍为半连通子图,这样我们就可以先将整张图缩点,重新构图,新图为拓扑图,记录每个新的点表示的强连通分量中点的个数num[i],那么我们就可以DP了,新图中的每一条链都为原图的半连通子图,这样我们找到新图中的最长链就行了,找入度为0的点dfs做树上DP,这样我们可以知道每个点的len[i]代表从这个点开始的最长链的长度,len[i]=max(len[son of i])+num[i],然后我们求出来了第一问,对于第二问,我们需要找len[i]=ans1的点做dfs,然后设ans[i]为以i为根的子树的方案数,那么ans[i].. 阅读全文
posted @ 2014-02-28 18:55 BLADEVIL 阅读(283) 评论(0) 推荐(0) 编辑

bzoj 1452 二维树状数组

摘要: 每一种颜色存一颗二维树状数组,然后直接做就行了。/**************************************************************Problem: 1452User: BLADEVILLanguage: C++Result: AcceptedTime:4844 msMemory:36904 kb****************************************************************///By BLADEVIL#include #include #define maxn 301#define maxc 101.. 阅读全文
posted @ 2014-02-26 17:05 BLADEVIL 阅读(331) 评论(0) 推荐(0) 编辑

bzoj 1968 数学

摘要: 在1-n所有数中,i一共可以成为n/i个数的约数,也即所有的约数中有n/i个i,所以扫一遍累加答案就好了。/**************************************************************Problem: 1968User: BLADEVILLanguage: C++Result: AcceptedTime:32 msMemory:804 kb****************************************************************///By BLADEVIL#include int n,ans;int ma.. 阅读全文
posted @ 2014-02-26 10:59 BLADEVIL 阅读(291) 评论(0) 推荐(0) 编辑

bzoj 1034 贪心

摘要: 首先如果我们想取得分最高的话,肯定尽量赢,实在赢不了的话就耗掉对方最高的,那么就有了贪心策略,先排序,我方最弱的马和敌方最弱的相比,高的话赢掉,否则耗掉敌方最高的马。 对于一场比赛,总分是一定的,所以两问实际上是等效的。/************************************************************** Problem: 1034 User: BLADEVIL Language: C++ Result: Accepted Time:264 ms Memory:1588 kb*******************... 阅读全文
posted @ 2014-02-26 00:51 BLADEVIL 阅读(292) 评论(0) 推荐(0) 编辑

bzoj 1079 DP

摘要: 比较容易看出来是DP,但是如果我们记录每一种颜色还剩多少种的话,消耗的转移的时间复杂度5^15,但是我们考虑到每一种颜色,如果数量相同的话,其实是等效的,所以我们用w[a][b][c][d][e][last]记录还剩下1,2,3,4,5次使用次数的颜色的数量为a,b,c,d,e,上一次我们那的是使用次数剩余为last的颜色,那么这次在剩余last-1次的颜色中,我们只能少拿一次,因为不能拿相同的,这样转移就很容易的表示出来了。 我把存状态的数组都开到20就在0mstle了,改到16就好了,求指导。。。/*******************************************... 阅读全文
posted @ 2014-02-26 00:47 BLADEVIL 阅读(524) 评论(0) 推荐(0) 编辑

bzoj 1202 并查集

摘要: 首先我们知道若干区间和信息,判断给出信息是否合法,可以用并查集维护,我们用dis[x]表示x到father[x]的距离为多少,即区间father[x]到x的长度,这样我们可以在路径压缩的时候维护dis,对于加进来的x,y区间,如果两点祖先不相同,那么合并,相同的话判断是否和已知的信息相符,这样就可以了。 需要注意的是为了防止x==y的情况发生,对于区间1,2和3,3,本来是连通的区间,但是因为读入为闭区间,所以需要将y++来使得区间向连通。/************************************************************** Problem:... 阅读全文
posted @ 2014-02-26 00:04 BLADEVIL 阅读(330) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 25 下一页