补题进度: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 |
|