02 2021 档案
摘要:题面传送门 把那个$q_j$消掉就变成$E_j=\sum\limits_{\frac{(i-j)2}}-\sum\limits_{\frac{(i-j)2}}$ 设$f_i=q_i$,\(g_i=\frac{1}{i^2}\),就有$E_j=\sum\limits_{f_i\times g_}-\s
阅读全文
摘要:题面传送门 考虑经典结论:\(d(i\times j)=\sum\limits_{a|i}{\sum\limits_{b|j}{[(a,b)==1]}}\) 代到原式里面去就是$\sum\limits_{\sum\limits_{\sum\limits_{a|i}{\sum\limits_{b|j}
阅读全文
摘要:CF1492A 按照题意模拟即可。注意ceil会有精度误差。 code: #include<cstdio> #include<cmath> #include<bits/stdc++.h> using namespace std; long long t,a,b,n,m; inline long lo
阅读全文
摘要:莫比乌斯反演是个很玄学的东西,这里面的东西我都证明不来。 众所周知,oier只需要结论而不需要证明 首先定义莫比乌斯函数$μ(i)$这个函数取值是这样的: 当$i=1$时,\(\mu(i)=1\) 当$i=\prod\limits_{i\leq k} p_i$时且$p_i$为两两不同的质数,\(\m
阅读全文
摘要:其实一直没有把整除分块看成一个算法,只看成一个思维。然后发现我不会思维了,于是来补一下学习笔记。 看一道例题:UVA11526 就是求$\sum\limits_{⌊\frac⌋}$ 我们发现很多值都是一样的,所以可以快速计算掉。 具体的,我们发现$i$到$⌊\frac{⌊\frac⌋}⌋$内所有数是
阅读全文
摘要:题面传送门 虚树,顾名思义是虚的,就是不能完全代表一棵树的树。 换句话说,虚树上只保留对我们有用的节点。而其它节点就没有必要存在。 可以来看一道例题[SDOI2011]消耗战 我们很容易发现,如果只保留树上的资源点和资源点两两之间的lca,那么其余的点全部是没有用的。 同时我们又知道结论:$n$个点
阅读全文
摘要:题面传送门 这个东西显然有$O(n2)$的$dp$式子$f_i=\min\limits_{dp_j+|\sum\limits_^+i-j-1-L|^p}$ 但是这个东西没有办法斜率优化或者数据结构优化。 考虑决策单调性优化。 如何证明其有决策单调性?显然这个东西满足四边形不等式,感性理解一下,如果转
阅读全文
摘要:我第一次学习SAM,可能有很多地方理解有偏差或者错误。还请各位大佬指正。这篇文章中没有严谨的证明,只有感性的理解。追求严谨的请转他处。 首先我们定义Parent树:一个节点与其所代表的字符串的最长的,且出现次数与其不一样的后缀连边,所形成的树是Parent树。 可以发现Parent树有很多优秀的性质
阅读全文
摘要:题面传送门 为什么写的是分治NTT啊,有哪位大佬会实数取模的FFT教我一下。 首先观察这个东西不是很好搞。因为后面要基于前面的转移。 但是我们发现如果用分治就可以无视这个限制。 所以用cdq分治,转移区间为$[l,r]$中点$mid$就先把$f$的$[l,mid]$和$g$的$[0,r-l]$卷起来
阅读全文
摘要:替罪羊树是一种平衡树。然而它既不能可持久化,又不能维护区间。 所以把它发明出来干嘛? 然而它可以维护子树内信息。这个是一众平衡树都不能做到的功能。 它维护平衡的方式和普通的平衡树疯狂旋转不太一样。它是如果这个子树不平衡就把这个子树拍平了重构。 具体地,如果左子树的节点数和右子树的节点数比值超过某个值
阅读全文
摘要:题面传送门 这个东西其实和序列上sa差不多,树上倍增数组预处理后同样倍增即可。 但是有一个问题就是序列上的sa由于各后缀长度不一,所以不会出现相等的情况,而树上则会出现。 由于题目中给出的比较方法是依据父节点的,而题目中又保证父节点在子节点前面,所以从小到大处理即可。 时间复杂度$O(nlogn)$
阅读全文
摘要:题面传送门 拉格朗日插值就是指:给出某个多项式的点值表示法,求这个多项式在取某一个值时的取值。 \(f(k)=\sum\limits_{i=1}^{n}{y_i\prod\limits_{j≠i}{\frac{k-x_j}{x_i-x_j}}}\) 感性理解一下,发现把$n$个给定点带进去是对的。一
阅读全文
摘要:题面传送门 高斯消元板子。 可以去翻翻七下数学书一元二次方程组中的代入消元法。 对于一般的整数方程我们可以用加减消元法。但是计算机不会,怎么办呢? 只能用算起来很复杂的代入消元法了。 一个一个系数来消。首先选择当前系数下最大的那个,这个可以保证精度。 然后将系数化为$1$ 之后把剩下每个方程的当前未
阅读全文
摘要:CF1485A 很不寻常的A题。 首先肯定有结论:第二个操作先做,再做第一个操作最优。 然后可以发现,操作次数不会超过一个很小的数。 所以可以枚举第二个操作的次数。然后计算即可。 这里取$w=40$ 时间复杂度$O(Tlog^2n)$ code: #include<cstdio> #define m
阅读全文
摘要:题面传送门 zyq扒原题不要脸! 题目要我们求图上任意两点间最短路。 这个显然很难解决。 于是我们可以观察一下数据范围。 然后就可以发现一个奇怪的事情,最多只是生成树上加$21$条边。 考虑先随便搞出一棵生成树。然后对于这$21$条边强制走,剩下的生成树上lca即可。 然而,这道题zyq丧心病狂地卡
阅读全文
摘要:题面传送门 考试的时候脑子抽了,想到$70$分暴力就没想了,甚至连状压都想到了,然后弃了。因为我第一题动都没动。 现在想想真是血亏。 首先发现每一位是没有任何关系的,所以可以每一位分开考虑。 这个式子首先肯定是先搞一个栈转成后缀形式再搞就比较好搞。 没有问号直接扫一遍求值即可。 考虑有问号的直接上$
阅读全文
摘要:CF1480A 显然先选前面的。 对于先手,如果当前位不是$a$,变为$a$即可。 否则变为$b$。 后手也这样分类讨论一下就好了。 code: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,y,z,t; ch
阅读全文
摘要:题面传送门 真是一道毒瘤题。 容易想到先把所有$S$插入AC自动机,然后在每插入一个$T$时算贡献。 但是有一个问题是插入$T$时可能会对一个串造成许多贡献。 这时就有一个很妙的trick:把所有待插入位置按dfs序排序,然后把每个点单点加的时候在每两个点lca处差分,这样就可以保证每个串只被计算一
阅读全文
摘要:题面传送门 感觉完全没有黑题的难度啊为什么要给黑的呢? 这种区间不太好搞,考虑差分。差分成$[1,r]-[1,l-1]$ 字符串匹配的题目就套路地上fail树。 考虑离线先把所有字符串插入AC自动机,并记录路径。 然后扫到一个点就按照路径插到AC自动机中,用树状数组+dfs序维护。之后就好了。 时间
阅读全文
摘要:题面传送门 真的吐血。百度上说真因数是除去$1$与它本身,但这道题如果除去$1$样例一都过不去,害的我调半天。 看到$x$很小,所以可以把所有序列枚举出来并插入AC自动机里面去。 然后设$dp_{i,j}$表示第$i$个数匹配到自动机上第$j$个节点,判断一下跳fail指针时会不会碰到序列的尾部节点
阅读全文
摘要:CF1481A 照题意模拟即可。判一下有没有不够的情况。 code: #include<cstdio> #include<cstring> #include<queue> using namespace std; int t,n,m,k,x,y,z,now1,now2,now3,now4,flag;
阅读全文
摘要:题面传送门 其实IOI题目一出来就口胡出这道题了,然而一直不想打,直到WC之后想缓解一下WC爆炸的心情,所以滚来写这道题。 这道题果然没有让我失望! 我们可以考虑一件事情:只要有$p{i,j}=3$或一个联通块中有两个环,那么一定无解。因为这样子一定有至少一个$p_{i,j}=4$ 这样就少掉了一种
阅读全文
摘要:题面传送门 像这种多字符串匹配就可以考虑建出AC自动机来搞。 如果没有增删操作直接匹配即可。 但是这道题有增删操作。每个节点fail子树内的权值会变。 所以可以把fail树的dfs序跑出来在上面维护树状数组即可。 讲道理这道题询问很多修改很少应该套分块才是,但是出题人没卡就不管了 时间复杂度$O(\
阅读全文
摘要:Day -INF 报了一下WC,希望能进。 后来发现我校一个csp-s100分没到的人都进了。、 Day 0 开始停课(尽管就停一天) 打了HHHOJ一场比赛,最后一题线段树维护hash被卡了模数卡掉$5$分还可行。这标志着我会WC会被卡常。 Day 1 开幕式没出锅还可行。 dzd金句: 虽然我们
阅读全文
摘要:题面传送门 这其实很cf。 我们发现如果整个网络是连通的话那么就不需要等到最后一个就可以知道。 所以我们要让其不连通。 那么只需要将最后一条边以及与这条边一个端点连接的边都设为0即可。 代码实现: #include<cstdio> using namespace std; int n,m,k,x[3
阅读全文
摘要:题面传送门 数据这么大显然是要我们用线性算法。 考虑把这个东西放到AC自动机上,预处理出每个节点能从哪些位置转移,这样的复杂度是$O(m|s||t|+n|s|)$的,不是很优秀,可能会被卡满。 发现dp转移方程是一个或的形式,也就是只要有一个为$1$即可而并不要求是哪一个为$1$,所以就可以考虑状压
阅读全文
摘要:题面传送门 实在写不动AC自动机于是跑来写dp了。 考虑这个怎么转化。 首先可以转化为求最大边数然后加一。 左右端点一定有一种最优情况不是叶子节点,因为如果是叶子节点那么叶子节点上面那个也行。 之后计算一下每个点的度,每个点的贡献是度-1,即减去与其父节点的连边的重复贡献。 然而你会发现根节点多减了
阅读全文
摘要:题面传送门 首先看到题面中保证$n$为偶数,所以可以从这一个方面来推。 稍微用初一上的内容推一下就可以发现:对于一次取得升序序列$a$,其权值为$\sum\limits_{2}+1}-\sum\limits_{\frac{2}}$ 那么一定是在满足每种颜色$k$个的颜色下,最大的$\frac{2}$
阅读全文
摘要:题面传送门 话说我居然连快读都没加就过了。 容易想到莫队。 首先可以看出一个节点增/删有两个贡献:区间比它小的数的个数和区间比它大的数的和。 容易想到可以用树状数组维护,但是这个是$O(n\sqrt nlogw)$的,不是很优秀。 考虑莫队二次离线,那么分开算贡献即可。 注意离线时用域值分块可以做到
阅读全文
摘要:题面传送门 AC自动机蛮好的一道题,需要有一定对AC自动机的理解。 首先把所有字符串扔到AC自动机里面去。然后求出fail指针。 对于每个询问暴力匹配肯定是不行的,考虑怎么转化。 可以发现如果把fail指针抽出来,那么一个节点的子树内所有节点都能与这个节点匹配。 那么就可以把询问离线然后dfs搞。
阅读全文
摘要:题面传送门 这个东西很难优化,考虑用另一种方法计算。 考虑枚举断点,左边为$s1$,右边为$s2$。左边直接AC自动机匹配即可。但是右边很难搞。 发现右边要匹配前缀不好处理,那么就让模式串和文本串同时反序,就可以变成好搞的后缀了。 时间复杂度$O(n+\sum{|S|})$ 代码实现: #inclu
阅读全文
摘要:题面传送门 考虑一下,会发现这个东西不太好算,考虑容斥一下,用总数减去一个都没有出现的个数。 那么就可以设$dp_{i,j}$表示匹配到$i$,AC自动机上匹配到$j$的方案数。预处理一下就可以做了。 时间复杂度$O(m\sum{|S|})$ 代码实现: #include<cstdio> #incl
阅读全文
摘要:CF1473A 显然要么是初始整个序列就都小于$d$,否则大于$d$的需要变成最小值加上次小值。判断一下即可。 code: #include<cstdio> #include<algorithm> using namespace std; int n,m,k,x,y,z,t,a[139],d,max
阅读全文
摘要:题面传送门 第一道AC自动机优化dp 考虑$dp$方程式怎么列,会发现无论怎么平凡的设法都会有后效性。因为是匹配,所以考虑在AC自动机上设状态。 设$dp_{i,j}$表示匹配到$i$,在AC自动机上为$j$点的最大值。则每个往后转移即可。 注意可以预处理出每个点跳fail能得到的权值。 时间复杂度
阅读全文
摘要:题面传送门 因为上一题单串匹配是KMP+栈,所以这道题多串匹配考虑AC自动机+栈。 开一个栈记录当前没有被弹出的字符。同时记录匹配到了那个节点,在AC自动机上跑匹配即可。 注意有一个方法就是字符串结束标记上直接打上字符串长度这样就不用那么烦。 时间复杂度$O(|S|+\sum{|T|})$ 代码实现
阅读全文
摘要:这里给三个板子做一个总结 简单版 AC自动机就是KMP+Trie,fail指针在多模式串之间跳跃来进行匹配。 fail指针有一种很妙的写法: inline void bfs(){ register int i,tot; for(i=0;i<26;i++)if(f[0].son[i]) q.push(
阅读全文
摘要:题面传送门 题目这个删掉后重新接成字符串很难处理,所以考虑用栈来衔接。 那么可以记录前一个匹配到哪里,然后就可以继续匹配。 时间复杂度$O(n+m)$ 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,
阅读全文
摘要:题面传送门 没有修改,考虑莫队,容易想到一个移动指针时用树状数组维护的$O(n\sqrt nlogn)$的方法,但是过不去。 这种情况就可以考虑莫队二次离线,把询问拆分,分类讨论一下即可。 注意这道题需要维护正反两个离线。注意卡常。注意离线那个树状数组要用域值分块来做到$O(1)$查询。 哦还有这道
阅读全文
摘要:题面传送门 考虑一般的莫队。复杂度$O(n\sqrt nC_{14}^{7})$ 这里面转移的复杂度略微有点大。 考虑$[l,r]\(转移到\)[l,r+1]$的贡献。即$a_{r+1}\(对于\)[l,r]$的贡献。 这个东西可以差分,变成$[1,r]-[1,l-1]$,然后就可以统一计算了。 剩
阅读全文
摘要:题面传送门 题解区居然没有一个写理论复杂度最优的算法的。那我就来讲一下。 首先显然有一个结论:对于一个$b_i$,和小于$z-b_i$且最大的$a_i$连线时最优的。因为这样可以为大于当前$b_i$的提供更优条件。 同时没有修改就可以考虑离线算法,比如莫队。 莫队的增加时就是把当前$b_i$按照上面
阅读全文
摘要:题面传送门 闲着没事开始清任务计划。 显然单调栈处理出一条列当前的最高的点,然后单调栈向左右拓展找到第一个小于的点,细节处理一下即可。 时间复杂度$O(n^2)$ 代码实现: #include<cstdio> #define min(a,b) ((a)<(b)?(a):(b)) #define ma
阅读全文
摘要:题面传送门 因为不会写hard所以滚回来写medium了。 考虑dp,设$dp_{i,j}$为到$j$,分了$i$段的最大价值,有显然式子$dp_{i,j}=\max_{dp_{i-1,k}+w(k+1,j)}$ 这个是$O(n2k)$的,不能过。 考虑优化,看到后面那个范围很小,那么开个桶记录即可
阅读全文

浙公网安备 33010602011771号