摘要:
求 $S_{2}(n)=\sum \limits_{i=1}^n \sigma_0(i^2)$ 设 $f(n)=\sigma_0(n^2)$,$g(n)=2^{\omega(n)}$,$\omega(n)$ 表示 $n$ 唯一分解后有多少个不同的质因子。 那么 $f=g *1$,即 $f(n)=\s 阅读全文
摘要:
看了讨论区一个回答恍然大悟,%%% 幂级数 $F(x)=A(x)^p$,那么有 $F^{'}(x)=pA^{'}(x)A(x)^{p-1}$,$A(x)F^{'}(x)=pF(x)A^{'}(x)$。若 $a_0,a_1,\dots$ 的普通生成函数为 $A(x)$,令 $s_n=\sum \lim 阅读全文
摘要:
直角三角形的三边都可以表示为 $x=t(a^2-b^2),y=2tab,z =t(a^2+b^2)$,$t,a,b$ 都是整数且 $a>b,\gcd(a,b)=1$,$a,b$ 为一奇一偶。可以预处理出 $C_i$ 表示 $t=1$ 时有多少直角三角形的周长为 $i$,这个暴力枚举 $a$,$b$ 阅读全文
摘要:
1052 dp即可$dp[i][j]$ 表示前 $i$ 个数分成 $j$ 段。$dp[i][j]=a[i]+\max\{dp[i-1][j], \max\{dp[k][j-1]\}\}$前缀max优化一下即可 #include <bits/stdc++.h> #define ll long long 阅读全文
摘要:
一个 $(l,r)$ 有两个后继,所以 sg 值最大只有 2,$r-l+1$ 相等的 pair 的 sg 值相同,那么就枚举 $d=r -l+1$,对于一个 $d$ 很容易求有多少对 $(l,r)$ 满足 $r-l+1=d$ 打表发现 $d$ 的 sg 值最多只有 100 段。 设 $g_i$ 表示 阅读全文
摘要:
把 'O' 看成 'X',然后枚举它的四个方向看看是否能放,然后枚举 $2^4$ 种可能表示每种方向是否放了,放了的话就标成 'X',就相当于容斥,对于新的图去dp。 dp就是铺地砖,行用二进制来表示是否放了砖块。 #include <bits/stdc++.h> const int MOD = 1 阅读全文
摘要:
当前找出所有最短的重复串,删去之后,不会再出现小于等于当前长度的重复串了。 那么重复串的长度最多有 $O(\sqrt n)$ 种,删去就用后缀数组实现,枚举当前长度的分割点,求公共前缀长度和公共后缀长度,就是当前重复的长度了,然后就打标记删去即可。 #include <bits/stdc++.h> 阅读全文
摘要:
首先,一个联通块里的 $a$ 之和与 $b$ 之和必须相等才有可能,然后就暴力枚举两个点,将 $a>b$ 的找一条路引向 $a<b$ 的,本来以为可以类似于拓扑排序的,就找叶子节点,但发现没办法,因为有可能没法满足最大流量要小于一个值的要求。 #include <bits/stdc++.h> con 阅读全文
摘要:
修改操作只有 50 次,最多就只有 $O(50)$ 段查询,每段查询 dfs 一遍统计答案即可。 查询的是一个节点到其根路径上的节点的值,那么就 dfs 进入这个点就把这个点的值加入栈中,离开这个点就把它的值 pop 掉。具体查询方法就是对每种质因子都开一个栈,然后进入一个点就分解它的值,取每种质因 阅读全文
摘要:
满足的 pair 只有 $O(nlogn)$ 对,预处理一下每对的位置,然后离线每个询问,按右端点排序,遇到一个右端点就将所有满足的左端点在树状数组上+1,然后一个询问就用树状数组查询即可。 #include <bits/stdc++.h> const int N = 2e5 + 7; struct 阅读全文
摘要:
主席树实现二进制高精度。 #include <bits/stdc++.h> using namespace std; template<typename T> inline void read(T &x) { x = 0; T f = 1; char ch = getchar(); while (c 阅读全文
摘要:
由期望的线性性,$E(\sum \limits_{i=1}^{k} X_i) = \sum \limits_{i=1}^k E(X_i)=kE(X_1)$,只需要求出打完 $n$ 个怪后一件武器的期望值。 $dp[i][j]$ 表示打完 $i$ 个怪后,初始 level 为 $j$ 的武器能赚的钱, 阅读全文