A. Spy Detected!
对于\(i \in [2, n -1]\),当且仅当\(a_i \ne a_i - 1\)且\(a_i \ne a_{i + 1}\)时,\(i\)为最终答案。
否则,答案可能是\(1\)或者\(n\),将\(a_1\)和\(a_n\)与\(a_2\)比较看那个与\(a_2\)相同,另一个就是答案。
B. Almost Rectangle
标记出两点的坐标\((x_1, y_1)\),\((x_2, y_2)\)。
若两点不同行且不同列,那么已经确定了一个唯一的矩形。
若两点同属第\(x\)行,则只需再其他行种任选一行\(x^\prime\),在\((x^\prime, y_1)\)和\((x^\prime, y_2)\)处加点即可。
同列的做法类似。
C. A-B Palindrome
首先,由于是回文串,有些?
的位置填什么是已经确定了的。
统计字符串中,还需添加0
的数量,还需添加1
的数量,剩余?
的数量,分别记为\(a, b, c\)。
那么如果\(c\)是偶数,那么\(a\)和\(b\)都必须是偶数。然后扫一遍,先填其中一种,再填另外一种。
如果\(c\)是奇数,那么,字符串的长度必须是奇数,\(a\)和\(b\)中必须有且只能有一个奇数,且字符串的中心为?
。分类讨论,先填中心,转换成之前的情况处理。
D. Corrupted Array
其实\(b\)的顺序不会影响结果,为方便处理,不妨先将其升序排序。
假设\(x\)为\(b_i\),\(sum = \sum_{i = 1}^{n + 2} b_i\),那么\(\forall i \in [1, m -1]\),若\(sum - b_i - b_{m + 2} = b_{m + 2}\),则\(b\)除去\(b_i\)和\(b_{m + 2}\)就是一个可行解。
\(x\)也可能是\(b_{m + 2}\),特判一下就可以了。
E. Permutation by Sum
\(p_l, \dots, p_r\)的顺序其实不影响结果,不妨假设其为升序。
枚举\(p_l\)的值,可以\(O(n)\)判断是否有可行解。总的时间复杂度为\(O(n^2)\)。
判断
不妨假设\(\forall i \in [l+1, r], p_i = p_{i-1} + 1\)。记此时\(\sum_{i = l}^r p_i = t\)
从右边开始处理,若\(t > s\),则后续无论怎么搞,都无法满足条件。
若\(t < s\),则可以放大当前元素。每次放大不能放大到超过\(s\),也不能放大到违反升序的假设,即放大存在上界\(p_i + min(s - t, ma - p_i)\)。其中,\(ma\)表示第\(i\)个位置,不违反升序假设的最大值。
易得:每次尽可能放大是最优解之一。
然后模拟一下就完事了。
F. Education
假设最终Polycarp停在第\(i\)个位置。那么,对于之前的位置,能晋升就晋升是最优的。
贪心+模拟完事。
G. Short Task
由于要找满足条件的最小的\(n\),所以对于一个因子集合,每个因子只出现一次是最佳的。
由此,除\(1\)和\(n\)本身外,可以只考虑素因子以及素因子的组合。
然后就是欧拉筛跑一下。
假设当前已经得到了\(d(n) = c\),若加入一个新的素因子\(p\),那么\(d(np) = c(p+1)\)。
假设当前已经得到了\(d(n) = c\),若删除一个重复的素因子\(p\),那么\(d(n) = c - pd(\frac{n}{p})\)。