第21届东南大学大学生程序设计竞赛(热身赛)-题解

Problem A
将原序列从小到大排序后,不影响答案。

  1. 首先,答案不会超过a[n]。
    因为对于任意的A操作,B可以做逆操作,原序列不变。

甲操作完后,乙会选择新序列中最大的数进行拆分。这个最大的数可能是a[n], 也可能是新合并的数。

a. 假设甲选择的数包含了a[n]。a[n-1]+a[n]
b. 假设甲选择的数不包含a[n]。

  1. 猜想: 甲只会用到最大的三个数。
    反证法。
    考虑甲选择的两个数为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
并查集+分治(待补)

posted @ 2025-05-19 22:02  yinky  阅读(25)  评论(0)    收藏  举报