补题进度:5/12
雅礼中学出题
2018多校end
A
题意
题解
B
题意
题解
C
题意
题解
D
题意
题解
E
题解(树上启发式合并)
- 因为每个数的约数都不是很多,事实上小于 100000 的数最多只有一百多个约数。
- 对每个节点开一个set存这个节点所在子树的所有数的因子,不同子树出现两次这个因子即是$\gcd$。
- 启发式合并set,每次只要保证小的集合往的大的集合合并,这样就能保证复杂度。
- 时间复杂度$O(100·nlogn)$
- 注意每次合并后清空没用的set,否则会MLE
题解(线段树合并)
- 可以对每个节点的因子开一颗线段树,约数的范围是$[1,10^5]$,但约数的数量不多,动态开树即可
合并的时候写错了wa了十年(多亏了雨辰- 合并后更新要注意到叶子的时候,叶子没有左右儿子。
- 时间复杂度$O(100·nlogn)$
代码(树上启发式合并)
1 |
|
代码(线段树合并)
1 |
|
F
题意
题解
G
OEIS一下就好了啊
H
大数问题
大数板子或者Java
这样也可以过1
cout << fixed << setprecision(0) << pow(2,n)<< endl;
但这样会挂1
printf("%.0f\n", pow(2, n));
I
找规律发现第 $i$ 个所有的 $(i+j,i-j)$ 互质的个数为$\frac{phi[2·i]}{2}$。
J
题解
- 实际上主副武器的$S$都是不变的,变化的只有$x_i$,$|x_{mi}-x_{si}|=max(x_{mi}-x_{si},x_{si}-x_{mi})$
- 考虑k,每个$x[i]$都有两种情况$(+或-)$,一共只有$n·2^k$种状态。
- 暴力考虑所有主武器的状态,和副武器的状态进行匹配即可
- 时间复杂度$O(n·2^k)$
1 |
|