前几天实在是太颓废了点,直到今天才恢复。
今天主要的就是 VP 昨天晚上的 CF,还有改题。
我们设整个数列第 k 小的是 w,那么小于 w 的一定会被留下来,而 w 是可以被选择留不留下来的。小于等于 w 的数的数量又一定大于等于 k。所以我们只考虑小于等于 w 的数。
我们把所有小于 w 的单独拎出来,那么他们一定要是一个回文串,否则输出 NO,然后如果这些数的数量小于 k−1,那么我们就需要把那些在小于 w 的数之间的缝里的 w 加进去。如果在 w 数量也回文的情况下都凑不出 k−1 个,就说明无解。
最后把所有的无解都判掉就可以输出 YES 了。
先把无解和只用一次特判掉。
我们考虑 n=3 的情况。设它们是 {a,b,c},观察题解得到只要有解就说明次数 ≤2,我们又把 1 的情况特判掉了,所以只能是 2 次。
我们发现两次的分界点不可能在同一个地方,所以只能分别在 a,b 的缝里和在 b,c 的缝里。设第一次的 B1={a1,b1,c1},第二次的 B2={a2,b2,c2},那么有
⎩⎨⎧a=a1+a2b=b1+b2c=c1+c2a1+b1=c1a2=b2+c2解方程得出 b1=2c+b−a,b2=2a+b−c。构造就这么构造:a1=a,a2=0,c1,c2 就能够算出来了。
n>3 的情况类比一下,设 i 表示 i 前面的数的和小于 2sum,加上 ai 就大于 2sum 了,那么 i 所对应的两次操作就是 b1,b2,左边就是 a1,a2,右边就是 c1,c2。
我们有朴素的 O(n3) 但是能过 dp:设 dpi 表示填到 i 结尾的方案数。转移就去枚举最后一段。
但是我们发现样例都过不了。究其原因是这样子的:1 2 3 4 1 2 被计算了两次,一次是 1 2|3 4 1 2,另一次是 1 2 3 4|1 2。我们把它给一般化:s2+1,…,s1∣1,2,…,s2。而且这样有要求:s1>s2。我们再记录一个 dp2i,j 表示 i 以 j 结尾(且不用考虑是否算重)的方案数。我们在没有偏移量时将 dpi 减掉一个 ∑j=s+1上界不管dp2i−s,j 就行。
后日谈
我每天真的没有在虚度光阴吗?
日记
周一 7月 07 2025 677 字 · 3 分钟