Board: http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=6330#rank
第三周,做一套以前看过的题,虽然大致情况了解,想要有所收获,或者突破,在既有的束缚面前,似乎更难。
这场比赛现场赛最多是7题,比赛后我和哑熊YY了一下,让OL去做这套题,真是再适合不过了,8题似乎无压力,运气好,C和J也可以出一题。
这回真的一题一题去写,发现其实现实还是比想象稍微困难一点的。
【第一档】
B 小学智力题,切蛋糕。二分思想有了就好了。
H 这个题印象很深刻,所以昨天上来就写了。当时看题想了一会DP没想出,画了画图恍然大悟了。最优的情况是可以构造出来的。
I 模拟,用用STL还是很方便的。
【第二档】
A 这是道不错的博弈,成都前,hzj在学博弈,我们讨论了不少题,我给他的意见是,现在比赛一般不会有那么裸的SG函数的,一般博弈题都是DP。
结果成都真有一道酷似SG的博弈,我一想,不好,这下身败名裂了。就开始想这个题,没想出来(主要也是希望留着作比赛)。
很明显可以发现,这个题目的关键在于个数为1的堆对决策的影响。
没有这样的堆时,步数是固定的。必败者是不能通过移走某堆来逆转必败态的。
考虑含有1的堆时。为了简化思考,把题目的数拆分为两种:全为1的,不全为1的。
对于全为1的,不难分析出必败态:堆数%3 = 0。
不全为1时,如果1的堆数为偶,则对结果不会影响:后手和先手做一样类似的操作。
1的堆数为奇,如果取走后是必败态,就取走,否则合并到后面去。是先手必胜的。
这样写之后,你会发现样例过不了,没关系,这就对了。
这是一种特殊的情况,就是不全为1可以往全为1直接转换,特判掉。
特判这一个还有一点点不够,因为它会衍生出另一种必败态。再特判掉。DONE。
D 这个题状态压缩不难想,主要在于转移,其实也蛮常见了 = =
加菲写的,可能要注意一点细节。
E 放第二档有点太高了,其实知道每一轮Alice的选择只有两种后,就是一个再裸不过的2-SAT了。
【第三档】
F Harbin 2009 原题重现,所幸的是,那一场,我们三个都参加了,也都做过这道题。
不同的是,那个时候,我貌似对计算几何处于无知状态。一条线穿起最多圆,好像很难啊,于是最后差不多2个小时,都在一边玩...
这回加菲说的思路大致还是理解的,枚举一个圆,作为主要处理对象,去掉包含与被包含的,其他的圆都有1-2条公切线,这些公切线的端点可以用来表示一个圆的进出时间,即一些区间,问题就转化为那个经典的环形区间最多覆盖次数。N^2 logN。
加菲的代码写的还是很精练的,赞一个。
G 这个题其实昭示了我们的一个短板,字符串问题,尤其是我。
常年用RK水题,自动机只套模板,后缀数组不会,表示有点汗颜。该学一下了。
不过貌似我们还是用RK水了,没T,WA了。方法是我很久以前看某博客上写的:
记录出现过的字符串的长度,枚举字符串。
据说也不是很水,至少我觉得非常十分极其特别相当水。
【第四档】
C 这类题其实很常见,ZOJ某次月赛有两道Great Wall的题,一道最小割,一道是可以围出多个多边形,通过封闭关系来DP。
这个题的关键在于不能自交,这个信息需要记录起连通关系,即插头DP。
另一个一直想学没学的东西,哎。
J 经过昨晚WA到死的惨痛,今天来公司我把代码打了一份仔细读了一下,发现一个,只有一个很细微的错误,改了过了。
这个题的算法难度绝对不算什么第四档,而trick程度和代码复杂细碎度绝对是绰绰有余了。
算法大致就是,算出前面可以推算出来的,剩下若干个不确定Leg[i]和Num[i]的。
但知道sigma(num[i]) 与 sigma(num[i] * leg[i]),以及每个leg都不相同,并大于K。
1个可以直接算,2个可以枚举。
3个以上嘛,构造一下多解,就会发现没有多解的情况很少。
然后就是很繁琐很头疼的bug处理阶段,慢慢改吧。这才是这个题的乐趣所在...
总而言之,这套题确实不错,就是陈题多了点,但可以理解。
没搞出的题目也是能力不足知识没学好,没办法,这个得补,YY不得。