01 2018 档案
摘要:传送门 题解传送门 线性规划,最小费用最大流。 神奇的操作。 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector> #i
阅读全文
摘要:传送门 题解 扩展卢卡斯定理的模板。 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector> #include<queue
阅读全文
摘要:传送门 正儿八经的树哈希的模板题。 哈希方法是求出每个儿子的哈希值,排序,末尾加上该点的size连成一个串,再对这个串哈希。 因为要求出A所有同构的树的hash值,直接hash的复杂度是n^n log 先随便指定一个根哈希一遍,再树dp换根即可,换根的时候把每个人父亲传过来的hash值也扔进串中,然
阅读全文
摘要:传送门 传说中的回滚莫队。 按左端点所在块为第一关键字,右端点位置为第2关键字排序。 分别把左端点在同一个块中的询问一起处理,从这个块的下一个块的第一个元素开始加,因为右端点单调递增,只有加元素的操作。 然后对于左边的部分,对每个询问暴力加左边的然后考虑答案就好了。 //Achen #include
阅读全文
摘要:传送门 传说中的经典容斥+卢卡斯定理+中国剩余定理 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector> #
阅读全文
摘要:传送门 一段区间里求异或值最大容易想到可持久化字典树,然而要加上一个数,就很难受了。 考虑用权值线段树代替字典树,开一颗底层大小为2^k的权值线段树,i的位置代表i-1,那么在字典树上向下走一层刚好对应权值线段树上向下走一层。 这样直接在线段树上走就可以了。 因为要加上x,查询l~r是否存在相当于查
阅读全文
摘要:传送门 只会瞎那啥三分,然后正解是凸包。 题解传送门 式子摆出来,发现可以看成二维平面上一堆斜率为-a/b的点的横纵截距和。 然后一坨平行线中,值最大的就是最右上的直线。 一个点何时会成为最大值呢,维护一个右上凸包即可。 然后对于凸包上每个点计算答案,取min。 //Achen #include<a
阅读全文
摘要:传送门 一个杜教筛的简单题。 这里没开LL那里没模,de了好久。。 127872 5036446814 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio
阅读全文
摘要:八数码问题传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector> #include<queue> #include
阅读全文
摘要:传送门 最小费用最大流。 每天拆成两个点,i表示用完的餐巾,i+n表示干净的餐巾。 s向i连容量为ri费用为0的边,表示每天用脏的ri条餐巾。 i+n向t连容量为ri费用为0的边,表示每天需要用ri条餐巾。 s向1+n连容量为inf费用为p的边,表示新买进的干净餐巾,需要新买的在第一天全买了。 两种
阅读全文
摘要:传送门 传送门 exbsgs模板。 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<vector> #include<cstdio> #include<queue>
阅读全文
摘要:传送门 飞机延误,被llj同学勤奋的精神感动到决定打一道水题。 费用流水题。 把技术人员拆成n个,每辆车连向第i个技术人员的第j个点代价是这辆车是第i技术员倒数第j个修的的代价。 源点向每辆车连,每个技术人员向汇点连。 //Achen #include<algorithm> #include<ios
阅读全文
摘要:传送门 随便后缀数组跑一跑n^2就有95分,简直不能再划算啊。 正解如图。然后差分就好了。 灵魂画手。 这两天bug奇多,难得1A,老泪纵横。 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstd
阅读全文
摘要:传送门 kmp模板题。 虽然不知道为什么,但是大家都说n^2可以过。 于是直接n^2暴力,每个位置开头跑一遍kmp,也就是暴力枚举每个子串看是否合法。 以i结尾的子串合法满足存在一个nxt使nxt>=k&&i-nxt+1>tp; 十分暴力,我也不知道为什么可过, //Achen #include<a
阅读全文
摘要:传送门 我有效率这种东西吗,那是什么,可以吃吗 先对每行每列跑manacher,然后需要求出每个点可以向四周扩展的最大距离, 考虑单独一行,对于每个i只需求出它前面距它最远的一个j满足i-j+1>=min(rad[j]~rad[i]) 这个可以用单调队列维护,维护一个rad值单增的单调队列,同时记录
阅读全文
摘要:传送门 de了整整三个小时bug. 一直担心我的数位dp,然而并没错。 AC自动机各种毛病,fail怎么都不对,DE到怀疑人生, 最后发现我tmd用了一个栈来get_fail; 一直用stl突然心血来潮要手写一个队列,结果我tmd写成了一个栈。。 今晚真的是怀疑人生, //Achen #includ
阅读全文
摘要:传送门 题解传送门 吉司机线段树。 奥妙重重。 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector> #include<
阅读全文
摘要:传送门 先筛出m以内的质数,g[i]表示i是否是素数 f[i][j]表示前n堆数异或和为j的方案数。 f[0][0]=1; f[0][1]~f[0][m]=0; f[i][j] = sigma( f[i-1][k] * g[k^j] ) 发现这个玩意满足乘法结合律 ∴ f[n][] = sigma(
阅读全文
摘要:传送门 树上带修莫队的模板。 主要是查询的时候,一开始脑子抽了想log修改log查询显然会T到死,然而O1修改根号查询就好了,直接分块维护。 注意修改每次改回去的到时候改回的是上一次修改的颜色不是它本来的颜色,WA了好久。。。 //Achen #include<algorithm> #include
阅读全文
摘要:传送门 一晚上写了一道傻逼题,这不是日常吗。 de到死亡,怀疑人生,然后重构 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<ve
阅读全文
摘要:传送门 最小表示法模板 //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector> #include<queue> #incl
阅读全文
摘要:sam上维护lct,一直想做(?)一道这样的题终于在sxy的带领下做了一道最简单的模板题。 因为强制在线,又要增量的构建后缀自动机,就用lct动态维护parent树。每增加一个字符,就把它从parent树上到跟的这一段路径上的权值+1,这个可以用个懒标记维护。 然后就是后缀自动机上操作跟平时一样,只
阅读全文
摘要:pallord-rho模板 传送门 不能srand,不能srand,不能srand 为此RE了40min //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdi
阅读全文
摘要:传送门 求仙人掌的直径。 求一遍边双,建立圆方树,然后在树上dp; //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector>
阅读全文
摘要:传送门 小半个月前的测试,现在翻出来。 考试时我和sxyA了这题。 当时随便搞了个dp,dp[i][j]表示i个数能看到j个的情况数,考虑新加入一个比之前i-1个数都小的数,能看到它的情况是它加到第一个,不能看到它的情况是它加到第1~i-1个数之后。所以 dp[i][j]=dp[i-1][j-1]*
阅读全文
摘要:传送门 今天来学回文自动机的模板吧!Achen开心地告诉自己,然后打开了一道水题。 噫,这不是马拉车的水题嘛、、 第一反应,马拉车,然后线段树维护第i个字母结尾的最长回文串长度 然后其实做法应该是线性的,傻了吧,,, 考虑马拉车的时候往后拓展,容易想到每个点第一次被拓展到的时候的那个店就是以它为结尾
阅读全文
摘要:传送门 一道后缀自动机的简单题; 对串建立后缀自动机,然后基排算每个点的right集合大小,它能到达的点集的大小,它能到达的点集的right集合大小。 然后直接在自动机上跑就好了。 //Achen #include<algorithm> #include<iostream> #include<cst
阅读全文
摘要:传送门 生成树计数裸题,因为模数不是质数所以要用辗转相除的高斯消元。 de了很久的bug然后发现一个变量A赋值后下一行又申明了一个新的临时变量A(: //Achen #include<algorithm> #include<iostream> #include<cstring> #include<c
阅读全文
摘要:传送门 题目可转换为已知一个串kmp之后的nxt数组,求字典序最小的原串。 已知第i位结尾的串循环节长度位x,那么nxt[i]=i-x; 当nxt不为0时,s[i]=s[nxt[i]]; nxt为0时,那么考虑kmp的过程,沿着nxt[i-1]一直往前跑找到的每一个j,s[j+1]都不能是现在的s[
阅读全文