转盘锁
首先将该题转化为一个最短路问题,这道题的边权为 \(i\),考虑到 \(x \rightarrow y\) 的路径长度等于 \(0 \rightarrow x - y\) 的路径长度,使用 bfs。(在每位数字模 \(10\) 的意义下。)
多姿多彩
首先都不想等的贡献是 \(n^3\),接着我们去掉 \(A_i = B_j\) 的贡献,就是答案了,根据找规律发现两个位置上的数字经过左移会用 \(n\) 次在同一位置上,令 $cnt_i = $ 字符 \(i\) 在字符串的出项次数,那么第 \(i\) 种字符串 \(A_i = B_j\) 的贡献是 \(cnt_i \times cnt_i \times n\)。
黑白树
考虑设计状态 \(dp_{i, 0 / 1}\) 表示在以 \(i\) 为根的子树内选择了偶数/奇数个叶子节点。
注意一下非法转移和 \(dp_{i, j}\) 是否会访问到同一阶段的状态。
苟延残喘
首先如果求一次 \(f(A)\) 操作,我们能在 \(O(N \log_{2} N)\) 内实现,而 \(N - 1\) 次的时间复杂度就是 \(O(N \times \log_{2} N)\),我们只需处理取模的问题我们发现:
先对 \(A\) 排序。
第零次操作后最大值与最小值的差为 \(A_n - A_1 \le 10^9\)。
第一次操作后:
最小值为 \(A_1 + A_2\),
最大值至多为 \(A_1 + A_n\)。
那么第一次操作后最大值与最小值的差至多为 \(A_n - A_2 \le 10^9\)。
以此类推。
根据这个发现,我们在操作开始前同时对现在数组内的数减 mod 的倍数。
浙公网安备 33010602011771号