题目链接
https://acm.hdu.edu.cn/contests/contest_show.php?cid=984
A
简单结论题
B
Pro:
依次向平面添加(n)个点
第(i)个点会对其半径(r_u)的范围内的所有点(j)造成(v_j)的损失。
求加入每个点后的损失和。
保证数据随机
Sol:
1.
kd-tree硬冲即可。
2.
考虑把平面分块(70*70),把每个点丢到对应的块中。每次暴力枚举所有的块。
块被分为三种,完全覆盖,部分覆盖,无覆盖。
完全覆盖和无覆盖直接统计,部分覆盖的枚举块内所有点统计答案即可。
C
Pro:
给定一张网格图
选出一些边,使得构成若干个边不相交的封闭环。
求每个格子对其四个相邻边选择数量的奇偶有限制。
求方案数。
Sol:
容易发现只需保证所有点度数为偶数即可。
故所有限制均可转化为异或方程组,高斯消元求秩即可。
D
不会
E
CCPC2020网络赛原题
F
Pro:
求区间异或和(>=k)的最短区间
Sol:
限制:(S_r xor S_{l-1}>=k)
考虑枚举右端点,(Trie)树维护答案。
具体实现在(Trie)上按位贪心即可。
G
Pro:略
Sol:
可以列出(x)关于(n)和(t)的方程。
使用(bsgs)求解即可。
由于式子中含有(-1)^t,需要分奇偶讨论。
H
Pro:
求面积最大的每一列都单调递增的子矩阵。
Sol:
预处理每个位置最多能向上延伸多高。
枚举下边界,单调栈求解即可。
I
(kruskal)搞一搞
J
Pro:
二维平面(n)个点形如((i,f[i]))。
多次询问一个矩形内所有的点有多少种(y)坐标。
Sol:
首先有一个比较蠢的树套树的(log^2n)的做法,不多赘述。
考虑莫队,瞎做的话是直接套一个树状数组,(O(n*sqrt(n)*logn))
瓶颈在于维护一个可重集合,
支持插入数字,删除数字,统计区间[l,r]内至少出现过一次的数字个数。
树状数组的话(logn)
写的比较好可以直接硬冲过去。
考虑莫队有(O(n*sqrt(n)))次修改,(O(n))次询问。
现有的做法是修改和询问都是(O(logn))
实际上,不难实现一个修改(O(1)),查询(O(sqrt(n)))的值域分块的做法。
复杂度降为(O(n*sqrt(n)))
K
Pro:
一个长度为(n)的项链,用红蓝绿三种颜色染色,相邻颜色不能相同,绿色最多(k)次,旋转同构。
求方案数。
Sol:
(Burnside)一下
//对于转动(i)次的置换,环长为(frac{n}{gcd(i,n)}),等价类个数为(gcd(i,n))
f(x)表示长度为(x)的环,用三种颜色染色,相邻颜色不能相同,绿色的个数不超过(frac{x*k}{n})个的方案数。
对于(f(x)),不妨枚举绿色的个数。
即设(f(x)=sum g(x,k))
计算(g(x,k))需要大力分类讨论一下情况。
1.第一个位置为绿色:
考虑先选择哪些位置放绿色。
问题等价于把(x-1)-(k-1)的序列分为k段,要求每一段都不为空。每一段中只要确定第一个位置是红色还是蓝色,剩下位置颜色确定,故需要额外乘上一个系数。
插板法:(C(x-k-1,k-1)*2^{k})
2.第一个位置不为绿色:
做法类似
(C(x-k,k)*2^{k})
综上,我们得到了(ans)的表达式
这个式子的暴算的复杂度是小于等于(n)的所有约数的和的,而(n)的约数和大概是(5n)左右,暴力计算即可。