mx 五月 csp-j

T1

考虑只有第二种操作。显然可以维护 \(a_i\) 代表当前序列的第 \(i\) 个数是什么。

观察到变换只和 \(k\% 3\) 的值有关。

对于第一种操作,显然可以令 \(k\leftarrow k\% n\)。观察到这种变换将整个序列视为一个环更方便一点,于是维护变换后第一个数的下标是多少。输出时按照环的原则输出。

综合起来,就是维护 \(begin\) 代表起点,第一种操作时直接改变起点,第二种操作改变从起点开始的三个数的 \(a_i\) 即可。

T2

\(dp_{i,j}\) 代表前 \(i\) 个数划分了 \(j\) 段的方案数。

\[dp_{i,j}=\sum_{k=1}^{i-1}dp_{k,j-1}\times [(s_i-s_k)\text{is a multiple of j}] \]

这是 \(O(n^3)\) 的,考虑优化。

根据同余的知识,\(s_i-s_k\)\(j\) 的倍数当且仅当 \(s_i\equiv s_k\bmod j\)

用一个类似 csp-s2023 T2 的技巧,加一个 \(g_{i,j}\) 辅助转移。

\[g_{i,j}=\sum dp_{k,i}[s_k\equiv j\bmod (i+1)] \]

然后做完了。

T3

和之前做过的一道 CF 很像,都是类似的二分实数。

根据直觉,选择二分答案 \(k\)

推柿子。

\[\frac{y_i-y_j}{x_i-x_j}\ge k \]

\(x_i-x_j\) 有正有负很难受,排序一下。

\[y_i-y_j\ge k\times (x_i-x_j) \]

\[y_i-y_i\ge k\times x_i-k\times x_j \]

\[y_i-k\times x_i\ge y_i-\times x_j \]

于是按照 \(y_i-k\times x_i\) 重新赋值。找一个最长不升子序列即可。

时间复杂度 \(O(n\log^2 n)\)

T4

很好的题。

分类讨论。

  • \(k=1\),此时答案为 \(0\)

  • \(n\equiv 0\bmod k\),会取走 \(k,2\times k,\cdots\),答案很好计算。

  • \(\gcd(k,n)\ne 1\),此时将 \(k\) 换成 \(\gcd(k,n)\) 显然是不劣的。

  • \(\gcd(k,n)=1\),按照 \(i\bmod k\) 对整个序列分成 \(k\) 类,会按某些顺序拿每个类。直接模拟即可。

时间复杂度 \(O(M^2\log n)\)

posted @ 2024-05-24 18:56  BYR_KKK  阅读(12)  评论(0编辑  收藏  举报