Codeforces Global Round 26

A

因为给出的是 \(a_i\le a_{i+1}\),所以当 \(a_1=a_n\) 即全部相同的时候 \(\textsf{range}\) 只能是 \(0\),故无解。

否则,如果 \(a_2\) 归一类,其他的归另一类即可,这样一个 \(\textsf{range}=0\),还有一个 \(>0\)

  • 写的时候脑子不知道咋了,导致 \(\boxed{\textsf{wa 1}}\)

B

首先如果 \(x\) 第一位是 \(1\) 并且最后一位不是 \(9\) 才有可能 \(\texttt{Yes}\)

考虑到如果中途出现一个 \(0\),那么他的上一位借位的时候就会使他变成 \(9\),这个也是不行的。

  • 直接写了第一个判断,因为没有好好想,样例也能过,导致 \(\boxed{\textsf{wa 2}}\)

C1

考虑维护当前可以得到的最小值 \(mn\),最大值 \(mx\)。一个操作开始前,一定是 \(mx\ge 0,mx\ge |mn|\)

  • 遇到一个 \(\ge 0\) 的数 \(x\)\(mn,mx\) 都加上 \(x\)

  • 遇到一个 \(<0\)\(mn\) 一定是加上 \(x\)\(mx\) 要么变成 \(|mx+x|\) 要么变成 \(|mn+x|\)

显然这样是最优的。

  • 没有考虑到 \(mx\leftarrow |mn+x|\) 的情况,导致 \(\boxed{\textsf{wa 3}}\)

C2

直接维护得到 \(mn,mx\) 的个数即可。千万不要想复杂了。

  • 想复杂了,导致 \(\boxed{\textsf{wa 3}}\)

D

考虑如果 \(s\) 全部是 \(\texttt{a}\),那么直接输出长度减一。否则令第一个出现但是不是 \(\texttt{a}\) 的数为 \(c\),它的出现次数为 \(cnt\)。那么我们要求的 \(t\)\(c\) 的个数一定是 \(cnt\) 的因数。考虑确定了这个个数 \(i\)

我么可以求出每一个 \(t\) 的大致位置是至少从哪儿到哪儿,划分完以后必须都一样。划分完以后,中间会有若干个 \(\texttt{a}\),令中间的 \(\texttt{a}\) 的个数最小为 \(mn\)。现在我们要枚举的就是 \(t\) 向左延申的 \(\texttt{a}\) 的个数 \(l\),和向右的 \(r\)\(l,r\) 本生就有限制(最左边和右边 \(\texttt{a}\) 的个数),并且 \(l+r\le mn\),这个世界枚举其中一个计算即可。

一些要注意的:

  • \(t\) 必须包含的那些 \(\texttt{a}\) 是必须完全相同的,因为 \(t\) 是连续的。

  • 切分的时候要注意中间必须全部是 \(\texttt{a}\),这个只能从后面的那个往前面伸,遇到不是 \(\texttt{a}\) 的停止。不能从前往后。

时间复杂度 \(\mathcal{O}(n\cdot d(n))\)

  • 我没有考虑到「注意的」,导致 \(\boxed{\textsf{wa 2+wa 5}}\)

E

结论题,被创死。

posted @ 2024-06-10 01:50  SFlyer  阅读(14)  评论(0编辑  收藏  举报