上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页
摘要: 分k>sqrt(n)和k<=sqrt(n)两种情况。后者可以直接爆搜。前者,每个数里,至多只有一个不合法的质数,所以不合法的数总是就是sigma( i=k+1~n, [i是质数] floor(n/i) )。这个函数不好求,不过floor(n/i)只有O(sqrt(n))种取值,我们枚举floor(n/i)的值,转化为求区间里质数数量。而这个区间端点恰好又都是floor(n/i)的形式,可以用min25筛的前半部分筛出来 阅读全文
posted @ 2020-08-06 21:35 duyiblue 阅读(557) 评论(1) 推荐(0)
摘要: min25筛,用来求一个函数的前缀和。算法分成两个部分,前一部分用DP的思想筛出质数的贡献。后一部分把质数与合数的贡献加和。它不仅可以用来求很多数论函数的前缀和,它前后两部分的思想也经常单独出现在一些题目中。 阅读全文
posted @ 2020-08-06 21:19 duyiblue 阅读(2409) 评论(3) 推荐(4)
摘要: 把序列变成一棵基环树。转化为求所有基环树环的数量之和。可以egf做。设g(n)表示n个节点的基环树森林数量,显然g(n)=n^n。设G(x)是g的egf。则n个节点的一棵基环树的数量就是F=ln G。环的总数,就等于F*G,相当于枚举某一棵基环树对答案的贡献,其他部分任意。时间复杂度n log n。k=2时,还要加上叶子数的期望,单独考虑每个节点的贡献即可。 阅读全文
posted @ 2020-08-04 22:10 duyiblue 阅读(350) 评论(2) 推荐(0)
摘要: 细品题意,可以把问题转化为,在一张DAG上,按编号从小到大依次标记每个节点。在标记节点 i 时,判断是否存在一个【能到达 i 的】或【i 能到达的】节点已被标记。在过程中维护是不好做的。但可以在拓扑排序时递推出,能到达每个节点的最小标号。 阅读全文
posted @ 2020-07-27 22:19 duyiblue 阅读(266) 评论(2) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2020-07-27 20:43 duyiblue 阅读(12) 评论(0) 推荐(1)
摘要: 转化为求A串一个区间和B串的最长公共子序列。预处理一个dp[i][j][k],表示从A串的i,B串的j开始,长度为k的公共子序列,在A串里的结尾位置最小是多少。转移从dp[i+1]转移到dp[i],考虑第i位选不选即可。回答询问时,枚举j,k,如果dp[L][j][k]<=R,可以用k更新答案 阅读全文
posted @ 2020-07-25 14:33 duyiblue 阅读(209) 评论(1) 推荐(0)
摘要: 如果已经知道结果串t,考虑s能不能得到t,可以做一个贪心“匹配”。知道这个贪心的策略后,考虑本题要计算所有t的数量,那么可以DP。设dp[i]表示有多少t能贪心匹配到s的前i位。转移时考虑t的下一位是1还是0即可。 阅读全文
posted @ 2020-07-25 13:47 duyiblue 阅读(450) 评论(0) 推荐(0)
摘要: 考虑从n-1到n递推答案f(n)。发现答案的差,可以用一个g(n)-g(n-1)表示出来。继续递归下去,到边界时,f(n)就等于1/2+g(n)。于是问题转化为求g(n)。先做一个分数裂项。然后套用莫比乌斯反演推出最终的式子。还需要卡一卡空间。 阅读全文
posted @ 2020-07-22 18:27 duyiblue 阅读(384) 评论(0) 推荐(2)
摘要: 物理学上的公式:s=p+1/2 a * t^2 。把机器人按a排序后,用单调栈做。难点在于求出一个机器人超过另一个机器人的时间。可以利用这个物理公式,把t看做未知数,解方程即可。 阅读全文
posted @ 2020-07-22 15:14 duyiblue 阅读(339) 评论(0) 推荐(2)
摘要: 把点分为大点和小点。修改时,如果是小点,则暴力更新所有邻居。查询时,枚举邻居中的大点,计算影响。一共需要O((n+q)*sqrt(n))次修改操作,O(q)次查询操作,考虑怎么维护每个点的集合,来支持这些操作。如果用动态开点线段树维护,则修改是O(log a),查询是O(1)的,不太合适。发现mex的值域只有deg(u),所以可以用数组记录每个值的出现次数,O(1)修改。对值域分块,O(sqrt(n))查询 阅读全文
posted @ 2020-07-21 22:35 duyiblue 阅读(885) 评论(5) 推荐(3)
摘要: 因为mod 1e9+9意义下可以找到sqrt(5)的值,所以考虑使用斐波那契数列的通项公式。问题转化为求一个形如 sum{i=0~n} (A^i+B^i)^K 的东西。把后面的括号用二项式定理展开,再交换和式即可。 阅读全文
posted @ 2020-07-21 21:07 duyiblue 阅读(897) 评论(14) 推荐(1)
摘要: 对每个i,预处理以i结尾的AA数量f[i],以i开头的BB数量g[i],答案就是Σf[i]*g[i+1]。朴素地求f,g,时间复杂度是O(n^2)的。考虑枚举A的长度len,把是len倍数的位置标位关键点,则每个AA必定跨过恰好2个关键点。枚举每一组关键点,可以O(1)统计出跨过它们的AA。关键点数量是调和级数。所以总复杂度O(n log n)。 阅读全文
posted @ 2020-07-18 17:45 duyiblue 阅读(270) 评论(0) 推荐(1)
摘要: 如果是有向无环图,则可以直接拓扑排序,递推出答案。考虑有环的时候,普通的拓扑排序是不会进入到环里面的,这就可能“阻隔”答案的传递,例如,如果一个点有后继是先手必败的,那该节点一定是先手必胜的,不过它在不在环上,我们都可以把它直接加入队列,去更新其他点的答案。注意保证一个节点不能被多次入队。这样做一遍bfs就能直接推出答案了。 阅读全文
posted @ 2020-07-17 13:45 duyiblue 阅读(911) 评论(1) 推荐(3)
摘要: 静态问题,可以结合子集枚举、大力递归(递归的边界,需要用高维前缀和预处理出来)这两种暴力,单次修改或查询的复杂度是O(2^{n/2})的。高维前缀和,可以等所有修改完成后,用fwt求出。非静态的问题,只需要对操作分块,不同块之间相当于是静态问题,块内的贡献可以直接枚举每个修改,计算出来。 阅读全文
posted @ 2020-07-17 00:35 duyiblue 阅读(308) 评论(0) 推荐(0)
摘要: 相邻的一奇一偶(2i+1, 2i+2)不可能全都选。对于每一组这样相邻的一奇一偶,考虑选奇数、选偶数、都不选这三种情况,分别称为A,B,C。则问题相当于要求有多少长度为m的ABC串,其中有a个A,b个B,m-a-b个C,且不出现BA这个子串。先考虑BC,方案数是C(m-a,b)。再考虑插入A,方案数是C(m-b,a),所以总方案数是C(m-a,b)*C(m-b,a) 阅读全文
posted @ 2020-07-16 18:18 duyiblue 阅读(351) 评论(0) 推荐(1)
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页