2019-2020 ICPC Asia Hong Kong Regional Contest
比赛链接
题目
A. Axis of Symmetry
显然,对称轴最多只有4条。且这四条可以很容易算出来。
如何判断是否轴对称?只需要将在重合的边删掉就可以了。
B. Binary Tree
一棵满二叉树的节点个数定为奇数。
因此节点总数为偶数的情况必定会转移至奇数,反之亦然。
于是判断奇偶性即可。
C. Constructing Ranches
题意
一棵树,带点权。求有多少条路径,满足以路径中所有点权作为长度的线段,能在平面内形成一个多边形。
$n\le 2\times 10^5,value_i\le 10^9$。
题解
一堆数能形成多边形的充要条件是 $\sum a_i > 2\max{a_i}$。
点分治,用容斥的方法统计答案。
按照最大值从小到大排序,枚举一条路径 $a$,然后看有多少个在这个之前的 $b$ 满足 $len_a+len_b>2max_a$。
这个可以离散化后二分+树状数组查询。
时间复杂度 $O(n\log ^2n)$。
代码
1 |
|
D. Defining Labels
签到题。转换进制就可以了。
E. Erasing Numbers
题意
给定一长度为奇数的排列,每次能在相邻三个数中删去三个数中的最大与最小值。
对于每个 $i$,问能否通过某种删除方式使得最后剩下的数在原数组中下标为 $i$。
题解
枚举第 $i$ 个数,将小于 $i$ 的看成 0
,大于 $i$ 个的看成 1
,自己看成 X
。
对于 X
处,不能含有两个 1
或 0
。
假设在 X
处删完后,还将剩下若干个 1
或若干个 0
。
于是大胆猜测能剩下 X
的当且仅当存在一种方法使得删一些东西后 1
和 0
个数相同。
显然连续三个相同的可以满足。
但可以发现,00100
这样也是可以的。
于是,对于一个连续的序列,|0
的个数 - 1
的个数| 大于等于 $3$ 时,可以让差值减少 $2$。
用 X
将序列分成两半,分开处理,用类似求最大子段和的形式去做即可。
时间复杂度 $O(n^2)$。
显然可以做到 $O(n)$。
G. Game Design
题意
对于一棵有根树,每个叶子结点中一个怪物。每个点 $i$ 可以设置一个塔,价格为 $a_i$,覆盖 $i$ 中子树的所有怪物。
一种方案为某种设置塔的方案,使得覆盖所有怪物。方案的价值为塔的价值之和。
构造出一棵树,使得取到最小价值的方案数恰为 $k$。
$k\le 10^9$
题解
设 $f(T)$ 表示树 $T$ 的最小价值,$g(T)$ 表示树 $T$ 取得最小价值的方案数。
那么将 $T_1,T_2$ 合并,得到一个方案数为 $g(T_1)\times g(T_2)$ 的操作是:建立一个新的根节点,权值为 $f(T_1)+f(T_2)+1$,根节点连向 $T_1,T_2$。
但是,仅有乘法操作是不够的,考虑加法操作:新建一个根节点,权值为 $f(T)$,将根节点与 $T$ 的根节点相连,就得到了一个方案数为 $g(T)+1$ 的树。
记录 $f(T)$ 的值,传下当前需要的 $g(T)$ 值,分治处理。
时间复杂度 $O(\log k)$。
I. Incoming Asteroids
鸽巢原理,如果最终要变为 $0$,那么至少有其中一个要得到 $\lceil \frac{y}{k}\rceil$。
开若干个 set 记录当前的值。每次若有成员满足超过了 $\lceil \frac{y}{k}\rceil$,$y$ 至少变成原来的 $\frac{2}{3}$。
时间复杂度 $O(m\log n\log y)$。
J. Junior Mathematician
数位DP模板。。
K. Key Project
贪心,模拟费用流,时间复杂度 $O(nm)$。