第21届东南大学大学生程序设计竞赛(热身赛)-题解
Problem A
将原序列从小到大排序后,不影响答案。
- 首先,答案不会超过a[n]。
因为对于任意的A操作,B可以做逆操作,原序列不变。
甲操作完后,乙会选择新序列中最大的数进行拆分。这个最大的数可能是a[n], 也可能是新合并的数。
a. 假设甲选择的数包含了a[n]。a[n-1]+a[n]
b. 假设甲选择的数不包含a[n]。
- 猜想: 甲只会用到最大的三个数。
反证法。
考虑甲选择的两个数为a[i]和a[j]。不妨设i<j,则a[i]<=a[j].
且x不为前三大的数字。则一定存在一个第二大或第三大的数字x',可以替换x。
使得最后剩余的数字为x'+y>=x+y
而第二轮结束后,答案不会小于前两大的数字,也即ans>=(x+y, z)。这样答案一定不会变的更坏。
Problem B
定义: 特殊点,单独的'#'
若有解,则其必须由竖着的12取走,于是先将"其,这些12"拿掉。
Problem C
考虑一种构造
令a=(n+1)/3
ans = an+n-1-a = (a+1)n-a-1
当n>=? ans<=(n*n)/2?
Problem D
签到(略)
Problem E
并查集+分治(待补)

浙公网安备 33010602011771号