![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
BZOJ
ff_666
开心最好。。但现在正是奋起之时!!!
展开
-
LOJ2012(BZOJ4567)(Luogu P3294)
LOJ2012这题目描述的逻辑真是。。优秀 题目意思为(假设当前单词第x个学):如果有/为当前串的后缀/的单词/且没学,代价为N*N如果没有/为当前串的后缀/的单词/,学它的代价为x如果有/为当前串的后缀/的单词/,则代价为x-y(最近学的)把单词倒着存,后缀就变成前缀,可以用Trie维护假如定义“空”为所有单词后缀,则2可以看成是特殊的1 1的代价太恐怖,所以肯定要避...原创 2018-08-23 15:00:48 · 447 阅读 · 0 评论 -
LOJ10063(BZOJ1030)(Luogu4052)【JSOI 2007】
LOJ10063这题,不就是给你N个单词,在26N26N26^N个文章里查嘛 然后肯定建好AC自动机后,考虑计数DP 正难则反,我们定义这样的DP: F[k][x]表示走了k步,走到Trie上的第x个节点,且严格组成“火星文”的方案数 ——那么显然,当儿子可走时累计答案:F[k+1][son]+=F[k][x]F[k+1][son]+=F[k][x]F[k+1][son]+=F[k][...原创 2018-08-25 15:15:33 · 159 阅读 · 0 评论 -
LOJ10062(BZOJ2938)(Luogu2444)【POI 2000】
LOJ10062这题我们反向思考: 假如我们造出了一个无限串,在AC自动机上匹配,会发现什么? 显然,不会到达任意一个“有毒点”,所以会在有毒点之前借助nxt往回跳 然后既然是无限长,那么肯定会卡在某个环里 所以就可以**从根开始**DFS找环就好了。。 PS:不要忘记构造AC自动机时“有毒点”的向下转移! 复杂度:玄学,O(能过)O(能过)O(能过),有了重复标记大概为O(∑|S...原创 2018-08-25 14:10:54 · 151 阅读 · 0 评论 -
LOJ10061(BZOJ1195)(Luogu2322)【HNOI 2006】
LOJ10061N这么小,果断状压 那么构造AC自动机,直接暴力枚举添加字符即可。。 并且别忘了将nxt[x]的状态传递过来 ——因为如果当前串已经出现,那么nxt[x]也一定出现 所以就在构造AC自动机时加一句话:void getnxt(){ int hed=0,tal=0,x,i; for(int i=0;i<26;i++) if(AC.c[0][i]...原创 2018-08-25 13:00:51 · 138 阅读 · 0 评论 -
LOJ10060(BZOJ3172)【TJOI 2013】
LOJ10060这题题目大意:给你N个单词(也是N段文章),求每个单词在这N段文章里的出现次数然后随手写了个AC自动机——TLE了一个点。。#include&lt;bits/stdc++.h&gt;#define gt() (p1==p2&amp;&amp;(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)#de...原创 2018-08-25 11:03:30 · 415 阅读 · 0 评论 -
LOJ10059(BZOJ3940)(Luogu3121)【USACO 2015 Feb. Gold】
LOJ10059这题,乍一看,不就是LOJ10048嘛? 然后有N个单词。。多个KMP——AC自动机!!! 然后构造出这样的AC自动机:if(AC.c[x][i]) AC.nxt[que[++tal]=AC.c[x][i]]=AC.c[AC.nxt[x]][i]; else AC.c[x][i]=AC.c[AC.nxt[x]][i];就可以写个栈一路走就好了。。...原创 2018-08-25 09:41:47 · 529 阅读 · 0 评论 -
LOJ10058(BZOJ4327)
LOJ10058AC自动机,我们就是在Trie上用nxt指针跳来跳去。。 那么假如我们跳到一个节点x上,就说明Trie上0~x一路遍历下来组成的字符串在模板串中出现过 这样我们就在正常做AC自动机时打标记 之后从词尾位置往上跳到第一个标记即可。。#include&lt;bits/stdc++.h&gt;#define gt() (p1==p2&amp;&amp;(p2=(p1=...原创 2018-08-24 16:13:38 · 431 阅读 · 0 评论 -
LOJ10070(BZOJ1016)(JSOI 2008)
LOJ10070这题,需要知道最小生成树三定理 然后就很简单了。。 对于每种相同边权进行2102102^{10}的枚举,乘法原理统计答案。。#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)usi...原创 2018-08-24 15:04:08 · 153 阅读 · 0 评论 -
LOJ10069(BZOJ2654)
LOJ10069我们考虑Kruscal,显然边权越小越早被考虑 所以白边的边权变小后,所能加进最小生成树的边数绝对不会变少(感性理解,有很大几率变多。。) 所以我们就可以二分“每条白边的增量(可以为负)” 每次求出当前最小生成树后,更新的答案要减去need*mid ——如果有超过need条白边被用,超过的那部分一定能用黑边顶替,因为题目保证一定有恰好的解。。#include&amp;l...原创 2018-08-24 13:39:00 · 176 阅读 · 0 评论 -
LOJ10133
LOJ10133现在才发现写LOJ10068大材小用了。。 不过想法就是那篇。。#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)#define Up up[x][i-1]#define LL l...原创 2018-08-24 12:31:54 · 200 阅读 · 0 评论 -
LOJ10068(BZOJ1977)(Luogu4180)
LOJ10068这是严格次小生成树的模板题~~我们首先考虑非严格次小生成树: 可以证明,只要更改原图一条边就是满足条件的最优解: 首先我们假设加入一条边E,则最小生成树上形成了一个环,贪心的想法,我们会选择环中最长的一边替换掉假如再添加一条边E_(显然E_&amp;amp;gt;=E)若E_不在该环中,由于原图已为最小生成树,答案绝不会变小若E_在该环中,由于E_&amp;amp;gt;=E,答案也不会变...原创 2018-08-24 11:16:01 · 256 阅读 · 0 评论 -
BZOJ3679
BZOJ3679KMP的nxt满足S[0,k]==S[i−k+1,i]S[0,k]==S[i−k+1,i]S[0,k]==S[i-k+1,i] 可是这题需要满足长度&amp;lt;=(len+1)/2 所以我们假设nxt[i]−−−&amp;gt;inxt[i]−−−&amp;gt;inxt[i]---&gt;i(向iii连边),这样得到了一棵“Fail树” 我们要不断往上跳,直到dep&amp;lt;=(len+1)原创 2018-08-21 11:17:14 · 145 阅读 · 0 评论 -
[BZOJ5015]数学
https://www.lydsy.com/JudgeOnline/problem.php?id=5015容易发现,答案AnsNAns_NAnsN=∑i=1N−12N−1−iiK+NK=\sum_{i=1}^{N-1}2^{N-1-i}i^{K} +N^K=∑i=1N−12N−1−iiK+NK=2N−1∑i=1N−1(12)iiK+NK=2^{N-1}\sum_{i=1}^{N-1}(...原创 2019-07-11 19:05:31 · 186 阅读 · 0 评论