EDU-CFR-114(Div.2) 解题报告
更好的阅读体验
赛时AC 2道题,赛后补题做出来一道(赛时交了4发,赛后交了十几发才过,太残忍了)
总体难度比较高,可能题解会比较冗长
A. Regular Bracket Sequences
Problem
输入
Solution\ 1
update: 我的解法非常复杂,可以直接看
考虑一开始在 (((...(())...))),即
展现在坐标系上,就是一个山峰形,那么我们考虑将山峰的顶砍一刀,让它凹进去,变成
这样就得到了下一种合法序列,再下一种就再把左边的山峰砍一刀(自始至终都不管右边),每次砍左边的山峰,由于最初的山峰高度为
实现上,把最初的
Solution\ 2
CF官方题解,让我觉得我的解法太复杂了。直接引用英文原版,肯定能看懂。
start with the sequence
()()()()...; merge the first4 characters into one sequence to get(())()()...; merge the first6 characters into one sequence to get((()))()...; and so on.
B. Combinatorics Homework
Problem
你有 A、B、C,问能否组成“恰好有
Solution
显然,只要 猜出来一定总能互相拆的一对也不剩,无需多考虑,而针对前者,需要算出来两个数量较少的字母用尽浑身解数能把数量最大的拆得还剩几对。我们发现 ABABAAAA 和 AABAABAA 是一样的,于是我们又可以得到,尽可能多的拆散,就是把较少的两种字母分散开插进最多的字母里,怎么插无所谓,只要它们自己不连在一起就行。这样我们能够得到,针对前一种情况,能组成的对数的最小值为
C. Slay the Dragon
Problem
你有
Solution
这题竟然卡常!!!(痛骂 Codeforces)可能需要用 ios::sync_with_stdio(false) 才能过
很容易想到,每次可以用比龙的防御力小的能力值最大的人去打龙(给他提高一点),或是用第一个比龙的防御力大的人去打龙(不需要提高),然后再按需提高剩下的人(提高谁都没有区别,只需要考虑他们的和就行),取这两种方案中花费较小的一种。然后你就会发现细节巨多,当调了 n 遍终于调出错来时,你就会发现
Time limit exceeded on test 6
加上 ios::sync_with_stdio(false) 或快读可过(如果你是 scanf 党,当我没说)。