- 博客(718)
- 资源 (1)
- 收藏
- 关注
原创 【Live Archive】7148 - LRIP【2014上海区域现场赛L】【树分治+线段树】
传送门:【Live Archive】7148 - LRIP#include <stdio.h>#include <string.h>#include <set>#include <map>#include <math.h>#include <vector>#include <algorithm>using namespace std ;typedef long long LL ;#de
2015-05-08 20:06:01 1317 3
原创 【codeforces】528D. Fuzzy Search【FFT】
传送门:【codeforces】528D. Fuzzy Search题目分析:首先,我们先来了解一下FFTFFT求字符串匹配的方法。问题:求BB串在AA串中匹配的次数。解法: 我们用aia_i表示串AA第ii个位置的字符,bjb_j表示串BB第jj个位置的字符。AA串用多项式表示为: A=∑ni=1xi=∑ni=1A(i)\qquad\qquad A = \sum_{i=1}^n x^i=\su
2015-05-07 19:55:48 2778
原创 【Live Archive】4671 - K-neighbor substrings【FFT+后缀数组】
传送门:【Live Archive】4671 - K-neighbor substrings题目分析:和Ural 1996那题很像,都是通过将一个串反转后就可以将匹配变成卷积了。 由于从AA串中取出来的串是本质不同的,所以这里我用了后缀数组(用后缀数组纯粹是因为我懒= =)做了处理:处理出的heightheight数组,heightiheight_i表示字典序第ii小的后缀和字典序第i−1i-1小
2015-05-07 16:44:15 1361
原创 【ural】1996. Cipher Message 3【FFT+KMP】
传送门:【ural】1996. Cipher Message 3题目大意:问至少将多少个AA串的字节的最低位取反使得BB串是AA串的子串。题目分析:可以发现,只要将BB串翻转一下,AA串和BB串的匹配就符合一个卷积公式了。令aia_i为A串第ii个字节的最低位,bjb_j为B串第jj个字节的最低位(ai,bj∈{0,1}a_i,b_j\in \{0,1\})。AA串用多项式表示为: A=∑ni=1
2015-05-07 14:55:53 1169
原创 【Live Archive】6393 Self-Assembly【强连通】
传送门:【Live Archive】6393 Self-Assembly题目分析:假设我们只用到向上或者向右的块,这样我们只要找到一个回路使得某个块可以和第一个块一样,那么我们就相当于找到了一个循环,这样就可以无限循环了。但是我们要怎样去找这么一个环?考虑到必须是对应字母X+,X−X^+,X^-才能建边,然后一个环中一定是多个一对一对的这样的对应字母组成的。可以发现块的数量那么大也是无所谓的,因为我
2015-05-06 21:37:54 842
原创 【Live Archive】6395 SurelyYouCongest【最短路+最大流】
传送门:【Live Archive】6395 SurelyYouCongest题目分析:我们只要从点1开始做一次最短路预处理,然后对于给定的源点们,对于最短路图构成一个层次图,然后由于每一层都是互不影响的,所以我们对每一层暴力跑网络流就好了。my code:my~~code:#include <stdio.h>#include <string.h>#include <set>#include
2015-05-06 21:15:03 841
原创 【HDU】5217 Brackets【线段树】
传送门:【HDU】5217 Brackets题目分析:线段树区间合并。可以求出区间内不匹配的两种括号的个数。然后我们判断一下是否是-1,然后判断这个括号是右括号还是左括号,如果是右括号,我们从左往右合并,然后就可以二分出所在的区间了。左括号就相反。my code:my~~code:#include <stdio.h>#include <string.h>#include <math.h>#i
2015-05-03 19:28:47 1079
原创 【HDU】5221 Occupation【树链剖分】
传送门:【HDU】5221 Occupation题目分析:最直接的想法,用一棵树链剖分维护路径,一棵dfs序线段树维护子树。因为每次最多修改一个点,所以修改的时候我们暴力修改每个点就可以了。my code:my~~code:#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <stri
2015-05-03 11:35:10 1189
原创 【BNU】40719 Arithmetic Progressions【分块+FFT】
传送门:【BNU】40719 Arithmetic Progressions题目分析:用分块+FFT强行AC了这题…… 之前一直TLE……然后改了好久把姿势改的优美点了……终于过了……大概思路是:我们考虑分块,假设每一块的大小为S,一共分了B块然后我们分两种情况讨论: 1.第二个数在第i块,第一个数在(1~i-1)块内,第三个数在(i+1~B)块内。 2.至少两个数在同一块内。对于第一种情况,
2015-04-30 22:06:29 1049
原创 【HDU】5197 DZY Loves Orzing 【FFT启发式合并】
传送门:【HDU】5197 DZY Loves Orzing题目分析:首先申明,我不会dpdp方程= =……这个东西给队友找出来了,然后我就是套这个方程做题的Qrz……对于这题,因为n2n^2个数互不相同,所以每一列都可以单独考虑。设dpnidp_ni表示长度为nn的排列,能恰好看见ii个人的方案数,根据队友的发现,dpnidp_ni就等于|sni||s_ni|,其中snis_ni是第一类Stirl
2015-04-30 15:56:11 1418
原创 【ZOJ】3874 Permutation Graph 【FFT+CDQ分治】
传送门:【ZOJ】3874 Permutation Graph#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std ;typedef long long LL ;#define clr( a , x ) memset ( a , x , sizeof a )
2015-04-29 22:22:50 1828
原创 【SPOJ】Triple Sums【FFT】
传送门:【SPOJ】Triple Sums题目分析:首先我们不考虑i<j<ki<j<k这个条件,构造多项式: Y=∑xai\qquad\qquad\qquad Y = \sum x^{a_i} 那么ai+aj+ak=Sai+aj+ak=S的个数即xai+aj+ak=Sx^{a_i+a_j+a_k=S}的个数,等价于Y3中xSY^3中x^S的系数。 然后我们考虑容斥: (∑x)3=∑x3+3∑
2015-04-29 16:49:15 1088
原创 【BNU】33943 Super Rooks on Chessboard 【FFT】
【BNU】33943 Super Rooks on ChessboardUVA上的题,然而我怎么会蠢到去UVA呢!(其实是百度首先跳出来的是BNU→\to_→\to)题目分析:设numxnumx为NN个车没有覆盖的行数,numynumy为NN个车没有覆盖的列数。 首先我们考虑没有主对角线覆盖这一条件时,总共的没有被覆盖的面积就是numx∗numynumx \ast numy。 现在我们考虑主对角
2015-04-29 15:27:29 1243
原创 【HDU】1402 A * B Problem Plus 【FFT】
传送门:【HDU】1402 A * B Problem Plus题目分析:这就是大数乘法题,问两个大数相乘的结果,由于O(n2)O(n^2)的算法复杂度太大,所以我们用FFT来优化他。关于FFT网上资料很多,我就不多说啦。这是我做的第一道FFT,FFT是看算法导论学来的,感觉算导讲的很不错,简单易懂~
2015-04-28 11:13:57 832
原创 【HDU】5213 Lucky 【分块(在线算法)】
传送门:【HDU】5213 Lucky 【分块(在线算法)】题目分析: 我来说一下这题的在线做法。首先我们将区间分成n√\sqrt n块,用f[x][y]表示第x块的数和第y块的数相加等于K的对数,这个可以O(nn√)O(n \sqrt n)的预处理。然后还有g[x][y]表示在第1~x块中有的大小为y的数的个数,这个的复杂度同样O(nn√)O(n \sqrt n)。接下来,对于每组询问,我们考虑
2015-04-26 23:17:09 934
原创 【HDU】4348 To the moon 【可持久化线段树】
传送门:【HDU】4348 To the moon题目分析:可以将标记留在节点上,查询的时候累加就行了,这样避免了可持久化线段树打标记内存吃紧的窘态。my code:#include #include #include using namespace std ;typedef long long LL ;#define rep( i , a , b ) f
2015-04-22 21:38:18 2014
原创 【FZU】Problem 2137 奇异字符串【后缀数组】
传送门:【FZU】Problem 2137 奇异字符串题目分析:枚举x所在位置,向左右暴力扩展,lcp(L,x+1)>=x-L就累加ans。复杂度是O(nlogn+26*n),复杂度可以这么证明,假设我们以字母a为中心,那么不存在字母a的位置最多n-1个,直接枚举过去就好了,其他字母同理。my code:#include #include #include #in
2015-04-22 19:40:31 641
原创 【BZOJ】3289: Mato的文件管理【区间逆序对,莫队套树状数组】
传送门:【BZOJ】3289: Mato的文件管理my code:#include #include #include #include using namespace std ;typedef long long LL ;#define rep( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i )#defi
2015-04-21 23:55:29 1451
原创 【BZOJ】2286: [Sdoi2011消耗战【虚树DP】
传送门:【BZOJ】2286: [Sdoi2011消耗战my code:#include #include #include using namespace std ;typedef long long LL ;#define rep( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i )#define For(
2015-04-21 21:17:10 808
原创 【POJ】1509 Glass Beads 【后缀自动机】
传送门:【POJ】1509 Glass Beadsmy code:#include #include #include #include using namespace std ;typedef long long LL ;typedef unsigned long long ULL ;typedef pair pii ;#define rep( i , a
2015-04-21 16:05:38 1091
原创 【BZOJ】3572: [Hnoi2014]世界树【虚树DP】
传送门:3572: [Hnoi2014]世界树my code:#include #include #include #include using namespace std ;typedef long long LL ;typedef unsigned long long ULL ;typedef pair pii ;#define rep( i , a ,
2015-04-21 12:48:13 1124
原创 【HDU】5208 Where is Bob 【DP】
传送门:【HDU】5208 Where is Bob题目分析:设状态为dp[cur][l1][r1][l2][r2],cur表示当前二进制位的位置,l1表示第一个人的数的下界,r1表示第一个人的数的上界,l2表示第二个人的数的下界,r2表示第二个人的数的上界。l1,r1,l2,r2都是01变量,对于第一个数,如果数卡着下界不能变小时l1置为0,否则l1置为1表示可以变小。第一个数的
2015-04-19 19:38:16 1153 1
原创 【Codeforces】Codeforces Round #299 (Div. 1) E. Tavas on the Path 【树链剖分+区间合并】
传送门:【Codeforces】Codeforces Round #299 (Div. 1) E. Tavas on the Path大概题意:首先对于一个串s,我们可以提取m个只包含1的块,每个块都是s里的一个最长连续1子串。然后我们设x1,x2,x3...xm分别为这m个块中1的长度。现在我们有函数T(S),定义 ,f(xi)是f关于xi的函数,下面会给出。现在我们
2015-04-17 23:51:42 990
原创 【ZJU】3863 Paths on the Tree 【浙大2015年4月校赛D题】 树分治
传送门:【ZJU】3863 Paths on the Tree题意:给一棵树,问树上有多少个路径对有不超过K个公共节点的,路径a->b和b->a等价,路径对(A,B)和(B,A)只有当A和B是同一条路径时相同。分析:反过来考虑,考虑有超过K+1个公共节点的路径对数。我们考虑重叠的路径部分,这个可以用树分治来搞,然后路径对的两端延伸出去的部分不重叠,我们要预处理出这个部分。最
2015-04-13 23:24:42 1133
原创 【一道不知道名字的题】AC自动机+dp
太懒了,好久没写题解了。Time Limit : 3000/3000ms (Java/Other) Memory Limit : 65535/65536K (Java/Other)Total Submission(s) : 34 Accepted Submission(s) : 8Problem DescriptionLet Str be a long string
2015-04-07 12:52:01 868
原创 【codeforces】Codeforces Round #291 (Div. 2) 题解
这个寒假懒到爆啦~题目做了也都没写题解,今天补一个~这套题今天自己开了虚拟比赛模拟了下,只做出四题,感觉自己弱爆了T T,E题是吃饭的时候突然想到解法的。传送门:Codeforces Round #291 (Div. 2)514A. Chewbaсca and Number模拟就好了,注意开头数字为9不能变。#include #include #includ
2015-02-27 21:37:48 972
原创 【HDU】5164 Matching on Array 【AC自动机】
传送门:【HDU】5164 Matching on Array 【AC自动机】题目分析:系数通过两两相除或者log后差分可以消除,然后就变成了匹配问题了,时间允许,可以用kmp,如果时间严格,就用ac自动机,ac自动机需要做一些改造,我想到的就是每个节点用map存指向下一个节点的指针,为了准确起见,用两两相除得到的分数形式作为关键字,因为数大小在1~10000内,所以可以用分子*100
2015-01-25 20:33:14 1106
原创 【HDU】5156 Harry and Christmas tree 【lca】
传送门:【HDU】5156 Harry and Christmas tree题目分析:每一种颜色我们分开考虑他们对所有节点的贡献,对于两个颜色同为c的节点u和v(假设u!=v),那么在lca(u,v)的时候我们需要-1,因为在lca(u,v)一直到根的路径上,颜色c只能影响一次。基于此,我们对每种颜色的所有节点按照dfs序排好序,首先每个节点+1,然后对dfs序相邻的两个节点(注意颜色
2015-01-04 19:20:58 871
原创 【HDU】5157 Harry and magic string 【Palindromic Tree】
传送门:【HDU】5157 Harry and magic string题目分析:回文树裸题。令n为字符串长度,字符串下标从0开始。从字符串最后一个字符开始插入回文树构造回文树,记录以下标i~n-1为起点的回文串的个数的sum[i]。然后再正着构造一次回文树,边构造边累加答案,设x为以下标i的字符为结尾的回文串个数,则ans+=x*sum[i+1]。最后输出ans即可。PS:如
2015-01-03 22:11:49 1432
原创 【HDU】5155 Harry And Magic Box 【容斥原理】
传送门:【HDU】5155 Harry And Magic Box题目分析:很容易发现容斥的方法,首先我们不管是否每一列都有星星,但是一定保证每一行至少一个星星,因此我们得到了一个方法,这时有方案数(c[m][1]+c[m][2]+...+c[m][m])^n,但是这里包括了不合法的情况,于是我们用容斥减掉。最后的答案就是:这个就是用了容斥的方法把恰好为1~m-1个列为空的情况
2015-01-03 22:02:07 1523
原创 【HDU】5152 A Strange Problem 【线段树+欧拉函数】
传送门:【HDU】5152 A Strange Problem题目分析:本题的难点全在type=2上了,首先我们需要知道一个结论(为什么说是结论。。因为我不会推导T T而且在做这题之前我压根就不知道有这个结论!):A^x = A ^ (x%Phi(C) + Phi(C)) (mod C) (x >= Phi(C))。其中phi(C)是C的欧拉函数。然后我们发现phi(C)一
2014-12-28 15:23:45 1183
原创 【codeforces】Codeforces Round #284 (Div. 1) 【题解】
传送门:【codeforces】Codeforces Round #284 (Div. 1)498A题目等价于给N条直线,如果两个点分别在直线两侧,则++cnt,最后的答案就是cnt的值。方法就是带入点的坐标到直线方程ax+by+c中看得到的两个值的乘积是否小于0,小于0则++cnt。而我,用了十分蠢的方法!将直线变成线段,将所给两个点连接,这样题目就变成求与所给两点构成的线段
2014-12-25 21:45:42 1877 5
原创 【codeforces】2014-2015ACM-ICPC CERC 14 Problem G: Virus synthesis 【Palindromic Tree+DP】
传送门:【codeforces】2014-2015ACM-ICPC CERC 14 Problem G: Virus synthesis题目分析:首先我们构造回文树,然后我们只考虑长度为偶数的回文串,长度为奇数的回文串总可以通过长度为偶数的回文串然后加上剩下的所需字符构成(当然这个偶数回文串的长度可以是0,此时这个奇数回文串的构造次数就是其长度)。对于一个偶数长度回文串u,假设其构造次
2014-12-24 22:01:08 2087
原创 【codeforces】2014-2015ACM-ICPC CERC 14 Problem J: Pork barrel 【LCT+主席树】
传送门:【codeforces】2014-2015ACM-ICPC CERC 14 Problem J: Pork barrel题目分析:pushup内写错了一直没发现。。。把maxidx写成idx然后查了一下午没查出来,到晚饭后才发现。。然后再纠正了数组大小,终于AC了。。。写了我一下午,就因为这么一个小错误T T今天是平安夜,祝大家平安夜快乐!这题是要维护
2014-12-24 19:01:10 1832 2
原创 【ural】1960. Palindromes and Super Abilities【Palindromic Tree】
传送门:【ural】1960. Palindromes and Super Abilities题目分析:这题就是裸回文树了,按照读入顺序边插入边输出答案即可。。答案就是插入当前字符后回文树内表示回文串的节点个数。代码如下:#include #include #include using namespace std ;typedef long long
2014-12-23 17:14:46 1111
原创 【Tsinsen】A1255. 拉拉队排练 【Palindromic Tree】
传送门:【Tsinsen】A1255. 拉拉队排练题目分析:这题呢,首先按照字符读入顺序插入构造回文树,然后处理出每种长度的本质不同的回文串的个数,然后降序排序,之后就是模拟随便搞搞了。代码如下:#include #include #include using namespace std ;typedef long long LL ;#define
2014-12-23 17:06:50 1422
原创 【Tsinsen】A1280. 最长双回文串 【Palindromic Tree】
传送门:【Tsinsen】A1280. 最长双回文串题目分析:首先我们按照输入顺序插入字符构造回文树,构造好后我们就得到了以每个下标i结尾最长回文串长度lens,这时如果i-lens[i]>=0,那么我们将以i结尾的最长回文串长度+加上以i-lens[i]结尾的最长回文串长度作为此时得到的双回文串长度tmp,然后更新ans,ans=max(ans,tmp)。为什么此时我们更新可以呢?因
2014-12-23 16:52:45 1298 2
原创 【Tsinsen】A1393. Palisection 【Palindromic Tree】
传送门:【Tsinsen】A1393. Palisection题目分析:首先串S倒着插入构造回文树,处理出以每个下标为结尾的回文串个数cnt2[now] = cnt2[fail[now]]+1,然后处理出后缀和,suffix[i]表示开头下标大于等于下标i的回文串个数。然后我们再正着插入字符构造回文树,每次插入结束后,ans+=cnt2[i]*suffix[i+1]。当正着插入
2014-12-23 16:35:53 1434 2
原创 【codeforces】2014 Asia Xian Regional Contest G The Problem to Slow Down You 【Palindromic Tree】
传送门:【codeforces】2014 Asia Xian Regional Contest G The Problem to Slow Down You 【Palindromic Tree】题目分析:我们对两个字符串分别建立回文树,然后分别从节点0和1开始dfs,如果两个串都可以往某一个走,则ans+=两个串该节点下cnt的乘积,然后沿着这个方向继续dfs。代码如下:
2014-12-23 16:27:32 1431
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人