- 之后就考研 cp 并举了,所以题量会稍微下来一些,一些个人认为不很有意思的题也不会再更新。
ABC 401 D
- 有些特判,但是有没有多到无法忍受的地步,总体来说比较舒适。
- 首先本题不太可能从暴力的思路出发,\(2^{10^6}\) 的复杂度,过于爆炸。但我们仍然可以一步步推进。
- 发现按照题意描述,首先可以将 'o' 两边的问号排除掉。
- 此时场面上只剩下由若干 '.' 包围住若干 '?' 的形式需要我们进行进一步考虑,我们暂称其为问号块。切入点就是题意中要求的“ 'o' 的个数必须严格等于 k”。我们发现,对于每个问号块,里面最多含有
ceil(cnt / 2) 个 'o',且 cnt 为奇数的问号块只有一种转化形式,但是 cnt 为偶数的问号块有两种转化形式,此为第一处特判。
- 我们处理出剩下的问号可以生成的 'o' 个数以及我们需要的 'o' 个数,如果我们之后需要 0 个 'o',则当前串中的问号全部转化为 '.',此为第二处特判。
- 容易发现,若剩下的问号可以生成的 'o' 个数大于我们需要的,则剩下的每一个问号都可以有两种选择,那么我们直接输出当前串即可。我们需要处理的只是剩下的问号和我们需要的问号数量相等的情况:前面说过奇数只有一种生成形式,那么数量为奇数的问号块需要转化,但是数量为偶数的问号块不需要处理,处理后输出即可。