- 博客(31)
- 收藏
- 关注
原创 [ 树链剖分 后缀自动机 ] Codeforces504E Misha and LCP on Tree
对原树树链剖分,那么一条链可以表示成 O(logn)O(logn)O(\log n) 段区间。然后问题就转化为求两段区间的 lcplcplcp ,将每条重链正反都加入一个字符串中,构建出后缀自动机,求 lcalcalca 即可。 时间复杂度 O(nlogn+mlog2n)O(nlogn+mlog2n)\mathcal{O}(n\log n+m\log^2 n) 。#include<...
2018-03-30 19:52:27 326
原创 [ 线性基 ] Codeforces504D Misha and XOR
维护所有出现过的数构成的线性基,由于要输出方案,对于每个向量还要记一下它由哪些值异或而来。 用 bitsetbitsetbitset ,复杂度为 O(n332)O(n332)\mathcal{O}({n^3\over 32}) 。#include<bits/stdc++.h>using namespace std;typedef long long ll;const i...
2018-03-30 14:25:55 313
原创 [ 康托展开 树状数组 ] Codeforces504B Misha and Permutations Summation
利用康托展开可以在排列与变进制数间转化,其中变进制数就是从低到高第 iii 位的权值为 i!i!i! 的数。求答案时二分一下就好了。#include<bits/stdc++.h>using namespace std;const int N=200010;int n,m,x,k;int a[N];int c[N];int main() { scanf("%d",...
2018-03-29 20:22:13 269
原创 [ 背包 ] VK Cup 2018 - Round 2 Codeforces924E Wardrobe
容易发现答案一定可以表示成是一段 b[i]=0、一段 b[i]=1 、一段 b[i]=0 。 先对问题做一个转化:将下端在 [ l,r ] 改为上端在 [ max-r,max-l ] ,相当于将原答案反过来。然后可以发现对于两个 b[i] 相等的相邻块,a[i] 大的在下面一定比 a[i] 小的在下面优,因为这样会使 2 个上端更加接近而不会改变总高度。 将所有块按照 b[i] 从小到大排序,...
2018-03-28 20:48:05 303
原创 [ 杂题 树状数组 ] VK Cup 2018 - Round 2 Codeforces924D Contact ATC
假设当风力为 −w−w-w 时,点 iii 在 titit_i 时刻经过 000,当风力为 www 时在 t′iti′t_i' 时刻经过 000 。 显然在风力从 −w−w-w 变化为 www 的过程中,点 iii 经过 000 的时刻也会从 titit_i 变到 t′iti′t_i' ,而且这个过程是连续的。 对于点 i,ji,ji,j ,考虑什么时候满足条件。若 ti=tjti=tjt_i...
2018-03-28 18:15:31 433
原创 [ 决策单调性优化DP ] 计蒜客 是男人就过 8 题 H Sign Location
%%%LargestJN显然标志放在车站上是最优的。 令 fi,jfi,jf_{i,j} 表示放了前 iii 个标志,最后一个标志在 jjj 位置的最小代价,转移推下式子就行了。 打个暴力发现满足决策单调性,分治做就好了。 讲下怎么推式子。 最终 kkk 个标志把 nnn 个车站分成了 k+1k+1k+1 个区间,我们把 (i,j)(i,j)(i,j) 的贡献算在 iii 所在的区间内...
2018-03-27 12:58:07 783 5
原创 [ 杂题 复杂度分析 ] Codeforces955F Heaps
对于 k=1k=1k=1 ,可以直接树形DP求出答案。 对于 k>1k>1k>1 ,显然 maxdepth<logknmaxdepth<logknmax_{depth}dpi,jdpi,jdp_{i,j} 表示 iii 号点,depthdepthdepth 为 jjj 时最大的 kkk ,那么状态数是 O(nlogn)O(nlogn)O(n\log n) 的。 如果...
2018-03-26 17:43:20 380
原创 [ 杂题 ] Codeforces955D Scissors
对于 ttt 的每个前缀,双指针扫一遍求出在 sss 中出现的最左的位置,对每个后缀求出最右的位置。然后枚举 ttt 中分割的位置就好了。 注意判断 ttt 在一个子串中出现的情况。UPD:感谢 lifelikes 指出错误。 假如要求出最左的位置,由于要保证选的字符串长度至少为 kkk ,所以初始时指针在 kkk 。 但这样有一种情况,就是 ttt 串的一个前缀可以匹配 sss...
2018-03-25 16:22:45 671 2
原创 [ ST表 并查集 树的直径 ] Codechef March Cook-Off 2018 Maximum Tree Path
先枚举 gcdgcdgcd ,把所有边找出来,按照权值小的端点排序,然后从大到小枚举边,并查集维护直径就好了。 时间复杂度 O(nAi−−√(logn+α))O(nAi(logn+α))\mathcal{O}(n\sqrt {A_i} (\log n +\alpha)) 。#include<bits/stdc++.h>using namespace std;char nc(...
2018-03-23 21:09:24 179
原创 [ 并查集 ] Codechef March Cook-off 2018 Div 1 Chef Chooses a Subset
定义边的权值为连接的两点权值的 andandand ,那么一个连通块所有点的 andandand 值等于所有边权的 andandand 值。 枚举答案的 andandand 值,再枚举权值包含它的所有边,用并查集求出最大连通块就好了。 复杂度为 O(α3logn)O(α3logn)\mathcal{O}(\alpha 3^{\log n}) 。#include<bits/stdc+...
2018-03-23 19:14:35 165
原创 [ 线段树 ] HDU5306 Gorgeous Sequence
吉利论文例题#include<bits/stdc++.h>using namespace std;char nc() { static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;...
2018-03-23 14:15:27 203
原创 [ 虚树 ] [ Heoi2014 ] BZOJ3611 大工程
虚树裸题#include<bits/stdc++.h>using namespace std;char nc() { static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}...
2018-03-20 20:15:05 192
原创 Codechef March Challenge 2018 DIV 1 题解
Mix the Colors显然每次选最大的数加到一个数上是最优的,那么答案就是 n−颜色种数n−颜色种数n-颜色种数 。 代码Chef and Easy Problem预处理出每个二进制位的前缀和,询问时枚举每一位贪心选就好了。 代码Minions and Voting枚举每个点,二分出他会投给谁,正反各做一遍就好了。 代码Chef and Gcd Qu...
2018-03-20 14:51:33 319
原创 [ 高斯消元 二分图最大匹配 ] [ HEOI2013 ] BZOJ3168 钙铁锌硒维生素
题解#include<bits/stdc++.h>using namespace std;const int N=310;const int P=1000000007;int k,n,m;int a[N][N],b[N][N],inv[N][N],c[N][N];int f[N],cur,v[N],t[N];vector<int>g[N];int A...
2018-03-14 14:14:49 254
原创 [ 分治 决策单调性优化DP ] LOJ#6039. 「雅礼集训 2017 Day5」珠宝
设 fi,jfi,jf_{i,j} 表示售价 ≤i≤i\le i 的珠宝,使用 jjj 万元的最大吸引力。转移方程很容易写出。 因为售价相同的珠宝肯定是从最大吸引力开始取的,所以转移的函数是上凸的。 将 jjj 按 j mod ij mod ij~mod~i 分类,每一类的转移满足决策单调性,然后就可以用分治做了。 时间复杂度 O(maxciklogk...
2018-03-14 09:46:05 791
原创 [ DP 莫队 ]「2017 山东一轮集训 Day6」LOJ#6074 子序列
题解#include<bits/stdc++.h>using namespace std;const int SZ=1<<25; char nc() { static char buf[SZ],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,SZ,stdin),p...
2018-03-13 15:26:50 523 1
原创 [ 杂题 ] Codeforces949E Binary Cards
发现答案中每个二进制数最多只会出现一次。然后暴搜,过程中记下还有哪些数要表示,剪个枝就好了。 最多跑 2192192^{19} 次。#include<bits/stdc++.h>using namespace std;const int M=19;int k,n,m,x;bool a[M][1<<M];int c[M];vector<int>c...
2018-03-13 11:07:07 481
原创 [ 齐次线性递推式 ] BZOJ4161 Shlw loves matrixI
假设转移矩阵为 AAA 。 然后就是要求出 hAn−k+1hAn−k+1\textbf{h}A^{n-k+1} 。 AAA 的特征多项式为 f(A)=Ak−∑ki=1aiAk−i=0f(A)=Ak−∑i=1kaiAk−i=0f(A)=A^k-\sum_{i=1}^k a_iA^{k-i}=0 。 所以 An−k+1≡An−k+1&amp;nbsp;(&amp;nbsp;mod&amp;nbsp;f(A)&amp;nbsp;...
2018-03-13 09:06:12 463
原创 [ 杂题 ] Codeforces923D Picking Strings
先瞎JB推一下,得到一些结论:B→AC→AAB→AAAC→CB→AC→AAB→AAAC→CB\rightarrow AC \rightarrow AAB \rightarrow AAAC \rightarrow C ,反过来也成立,得出 BBB 和 CCC 是等价的,可以将所有 BBB 看成 CCC 。C→AC→AAC→CC→AC→AAC→CC\rightarrow AC \righ...
2018-03-11 19:39:30 273
原创 [ Manacher ] BZOJ3790
Manacher模板题#include<bits/stdc++.h>using namespace std;#define fi first#define se secondtypedef pair<int,int> abcd;const int N=100010;int k,n,m,len,cnt;int p[N],f[N];char s[N],S...
2018-03-11 16:00:37 173
原创 [ 决策单调性 分治 ] LOJ#535 花火
题解#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;inline char nc() { static char buf[100000],*p1=bu...
2018-03-10 11:29:08 397
原创 [ 容斥 斯特林数 ] Codeforces715E Complete the Permutations
题解#include<bits/stdc++.h>using namespace std;const int N=510;const int P=998244353;int k,n,m,x;int nx[N],d[N];int c[N][N],p[N][N],s[N][N];int a,b,cl,bl;int f[N],g[N],h[N],Ans[N];boo...
2018-03-10 10:05:19 392
原创 [ 斯特林数 NTT ] [ Tjoi2016&Heoi2016 ] BZOJ4555 求和
题解#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N=400010;const int P=998244353;int a[N],b...
2018-03-09 15:33:18 181
原创 [ 杂题 ] Codeforces946G Almost Increasing Array
如果不能删除且不是严格递增,答案就是 n−最长不下降子序列长度n−最长不下降子序列长度n-最长不下降子序列长度 。 假如严格递增,可以将 aiaia_i 减去 iii ,再求一遍 LISLISLIS 。 假如可以删除,因为删除的点后面的标号会减 111 ,所以不能直接求 LISLISLIS 。 设 f0/1,if0/1,if_{0/1,i} 表示当前是否删过点,长度为 iii 的序列尾端的最...
2018-03-07 19:10:04 465
原创 [ 分治 复杂度分析 ] [ NWERC2017 ] BZOJ5200 Factor-Free Tree
和bzoj4059一样的套路。#include<bits/stdc++.h>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p...
2018-03-07 16:12:04 295
原创 [ 分治 复杂度分析 ] [ Cerc2012 ] BZOJ4059 Non-boring sequences
对于区间 [l,r][l,r][l,r] ,如果 aiaia_i 在区间内只出现了一次,那么跨过 aiaia_i 的区间一定是合法的,只需要判断 [l,i−1][l,i−1][l,i-1] 和 [i+1,r][i+1,r][i+1,r] 就好了。 这样就得到了一个分治的做法:每次枚举区间中一个点,如果在区间中只出现过一次就分治下去。 有一个优化:把枚举顺序变成每次左边枚举一个点、右边枚举一个点...
2018-03-07 15:38:54 288
原创 [ DP KMP 矩乘优化 ] Codeforces946F Fibonacci String Subsequences
先对原串做一次KMP。 先考虑朴素的DP: 设 fi,jfi,jf_{i,j} 表示 F(x)F(x)F(x) 的前 iii 个字符能匹配到 sss 串第 jjj 位的方案数,结合KMP就可以转移了。 把状态用矩阵表示,对每个 F(i)F(i)F(i) 求出答案矩阵和转移矩阵,就可以递推求出答案了。#include<bits/stdc++.h>using namespace...
2018-03-07 13:39:32 344
原创 [ 后缀自动机 树上启发式合并 线段树 树状数组 ] [ 雅礼集训 2017 Day7 ] LOJ#6041
对原串建后缀自动机,222 个前缀的最长公共后缀就是其反串的后缀树中对应点的 lcalcalca 的 lenlenlen 值。 现在问题转化为:给定一棵树,求编号在 [l,r][l,r][l,r] 的 222 个点的 lcalcalca 的最大深度。 考虑一个暴力的做法:枚举树上每个点作为 lcalcalca ,将其子树中所有点按编号排序,那么对于每个点,离它最近的 222 个点一定是最优的,...
2018-03-07 07:05:28 418
原创 [ NOI2017 ] [ Hash 复杂度分析 ] BZOJ4943
将所有字符串哈希后存入哈希表,合并或分裂时暴力更新。 这样复杂度看上去是 O(nk2)O(nk2)O(nk^2) 的,实际上是 O(ck2+nk)O(ck2+nk)O(ck^2+nk) 。 证明: 显然要使复杂度更大,合并的 222 个队列的长度一定是 ≤k≤k \le k 的 假如使合并的队列长度为 SSS ,这样的队列只有 nSnSn\over S 个,复杂度为 nSS2=nSnSS2...
2018-03-06 11:41:34 283
原创 [ 斯坦纳树 ] BZOJ4774
题解#include<bits/stdc++.h>using namespace std;const int INF=1e9;const int N=10010;const int D=8;int h[N],nx[N<<1],t[N<<1],w[N<<1],num;queue<int>q;int k,n,m,d,x,...
2018-03-04 15:16:07 191
原创 [ DP ] Codeforces889E Mod Mod Mod
设 xi=xi−1 mod ai(x>1),x1=xxi=xi−1 mod ai(x>1),x1=xx_i=x_{i-1} ~mod~a_i(x>1),x_{1}=x ,即 xxx 依次对前 iii 个数取模后的值。 设 ansi=f(x,1)−f(xi,i+1)ansi=f(x,1)−f(xi,i+1)ans_i=f(x,1)-f(x_i,i...
2018-03-04 10:43:12 558
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人