上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页
摘要: 考虑每个gcd对答案的贡献。这不好求。可以先求gcd至少是d时对答案的贡献(也就是gcd是d的倍数),然后再容斥回去。多次询问时,考虑预处理答案,从n-1向n递推,则只有d是n的约数会有变化,这样的d总量是O(n log n)的。但我们不能每次重新做一遍容斥。可以把容斥转化为给每个d一个贡献系数,这样d的贡献值变化时,只要拿变化量乘以系数即可。 阅读全文
posted @ 2020-08-06 23:49 duyiblue 阅读(266) 评论(1) 推荐(0) 编辑
摘要: 分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 阅读(532) 评论(1) 推荐(0) 编辑
摘要: min25筛,用来求一个函数的前缀和。算法分成两个部分,前一部分用DP的思想筛出质数的贡献。后一部分把质数与合数的贡献加和。它不仅可以用来求很多数论函数的前缀和,它前后两部分的思想也经常单独出现在一些题目中。 阅读全文
posted @ 2020-08-06 21:19 duyiblue 阅读(1866) 评论(3) 推荐(3) 编辑
摘要: 把序列变成一棵基环树。转化为求所有基环树环的数量之和。可以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 阅读(333) 评论(2) 推荐(0) 编辑
摘要: 细品题意,可以把问题转化为,在一张DAG上,按编号从小到大依次标记每个节点。在标记节点 i 时,判断是否存在一个【能到达 i 的】或【i 能到达的】节点已被标记。在过程中维护是不好做的。但可以在拓扑排序时递推出,能到达每个节点的最小标号。 阅读全文
posted @ 2020-07-27 22:19 duyiblue 阅读(249) 评论(2) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2020-07-27 20:43 duyiblue 阅读(11) 评论(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 阅读(207) 评论(1) 推荐(0) 编辑
摘要: 如果已经知道结果串t,考虑s能不能得到t,可以做一个贪心“匹配”。知道这个贪心的策略后,考虑本题要计算所有t的数量,那么可以DP。设dp[i]表示有多少t能贪心匹配到s的前i位。转移时考虑t的下一位是1还是0即可。 阅读全文
posted @ 2020-07-25 13:47 duyiblue 阅读(436) 评论(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 阅读(362) 评论(0) 推荐(2) 编辑
摘要: 物理学上的公式:s=p+1/2 a * t^2 。把机器人按a排序后,用单调栈做。难点在于求出一个机器人超过另一个机器人的时间。可以利用这个物理公式,把t看做未知数,解方程即可。 阅读全文
posted @ 2020-07-22 15:14 duyiblue 阅读(327) 评论(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 阅读(855) 评论(5) 推荐(3) 编辑
摘要: 因为mod 1e9+9意义下可以找到sqrt(5)的值,所以考虑使用斐波那契数列的通项公式。问题转化为求一个形如 sum{i=0~n} (A^i+B^i)^K 的东西。把后面的括号用二项式定理展开,再交换和式即可。 阅读全文
posted @ 2020-07-21 21:07 duyiblue 阅读(876) 评论(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 阅读(248) 评论(0) 推荐(1) 编辑
摘要: 如果是有向无环图,则可以直接拓扑排序,递推出答案。考虑有环的时候,普通的拓扑排序是不会进入到环里面的,这就可能“阻隔”答案的传递,例如,如果一个点有后继是先手必败的,那该节点一定是先手必胜的,不过它在不在环上,我们都可以把它直接加入队列,去更新其他点的答案。注意保证一个节点不能被多次入队。这样做一遍bfs就能直接推出答案了。 阅读全文
posted @ 2020-07-17 13:45 duyiblue 阅读(751) 评论(1) 推荐(1) 编辑
摘要: 静态问题,可以结合子集枚举、大力递归(递归的边界,需要用高维前缀和预处理出来)这两种暴力,单次修改或查询的复杂度是O(2^{n/2})的。高维前缀和,可以等所有修改完成后,用fwt求出。非静态的问题,只需要对操作分块,不同块之间相当于是静态问题,块内的贡献可以直接枚举每个修改,计算出来。 阅读全文
posted @ 2020-07-17 00:35 duyiblue 阅读(278) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页