自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

gjghfd

今日はまた新しい一日でした

  • 博客(31)
  • 收藏
  • 关注

原创 [ 树链剖分 后缀自动机 ] Codeforces504E Misha and LCP on Tree

对原树树链剖分,那么一条链可以表示成 O(logn)O(log⁡n)O(\log n) 段区间。然后问题就转化为求两段区间的 lcplcplcp ,将每条重链正反都加入一个字符串中,构建出后缀自动机,求 lcalcalca 即可。 时间复杂度 O(nlogn+mlog2n)O(nlog⁡n+mlog2⁡n)\mathcal{O}(n\log n+m\log^2 n) 。#include&lt...

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<logk⁡nmax_{depth}dpi,jdpi,jdp_{i,j} 表示 iii 号点,depthdepthdepth 为 jjj 时最大的 kkk ,那么状态数是 O(nlogn)O(nlog⁡n)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(log⁡n+α))\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(α3log⁡n)\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 ( mod f(A) ...

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关注的人

提示
确定要删除当前文章?
取消 删除