Board: http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=7589#rank
这套题目质量很不错。
难度都不大,但任何一道题都需要思考。
A k与n-k是对应的,只管小的。可以发现k的范围会很小,枚举一下,然后二分N。
数很大,java肯定可以,但是double足以。
B 这个题的关键是理解题目中的递归定义,是每次把n层的树拿来重构n+1层的,左子树都变成 1/(A+1),右子树则变成 1/A + 1
显然可以通过与1比大小得到当前的第一步,递归下去,可以发现 1/(A + 1) = (1 / (1/A + 1)),因此每次应该减掉交换一下
那些看图能看出规律的,我只能说,你自己懂得
C 线段树 或 树状数组,虚拟一些空格位置出来,每次放的位置就固定了,任务就变成了求两个最近的disk事件间空格的数目
D 这是一道非常赞的2-sat,一般的2-sat都比较裸,这是我见过的最隐蔽的2-sat题目了
考虑黑色格子,有四个事件,上,下,左,右,同时考虑上下或左右可以得到初步的限制,使每个黑色格子都有两个白色匹配
这个时候还需要解决白色格子同时被两个格子匹配的问题,加上这个限制,模型就OK了
只是点略多,一直RE。准备改非递归的时候,发现标程的cpp也re但java不re,果断改java过了 > <
E 水题,按结束时间合并相同的
F 不错的最小割,目的就是使 # 和 . 不连通,要么直接转化,要么割中间相连的边
G 题目的条件就是很多Di - Dj >= Dis的不等式,显然是个差分约束
点很少,可以直接floyd求出最小环,然后拓扑排序
H 没有SPJ,做法很简单,状态DP,先枚举所有可行的
I 和 J 貌似都不难,但这两天比赛略多,有空补上 (UNDONE)
总之欧洲题目还是很给力的,要去金华了,final前最后的现场赛热身,用力。