20260714

T1

传送门
首先对于一个排列,\(T=\sum_{i=1}^{n}a_i\times i\)。由于 \(i\) 越大,权重越大,所以将 \(a\) 排序计算 \(T\) 一定是最优的。

现在把一次操作转化成删除一个数再加进一个数。
设旧数为 \(a\) 新数为 \(b\), \(a\) 的位置为 \(w_0\)(多个值取),\(b\) 的位置为 \(w_1\)。设前缀和数组为 \(s\)\(T\) 为开始产奶量。
位置可以用二分做。

考虑分类讨论。

\(w_1\le w0\)

  • \(a\) 减小 \(a\times w_0\),加 \(b\) 增加 \(bw_1\)。操作前 \([w_1,w_0-1]\) 的数位置都加 \(1\)。于是再加 \(s_{w_1-1}-s_{w_0-1}\)
  • 即为 \(T-aw_0+bw_1+s_{w_0-1}-s_{w_1-1}\)

\(w_0\lt w1\)

  • \(a\) 一样,但加 \(b\) 时前面少了一个数,所以是 \(b(w_1-1)\), 同时 \([w_0+1,w_1-1]\) 都减 1。
  • 即为 \(T-aw_0+b(w_1-1)-s_{w_1-1}+s_{w_0}\)

T2

传送门

长脑子题。

每一行只有 \(18\) 个字符,很显然要状压,搜索什么的。那么把每行转化成一个二进制数就会更好做。

使用状压 DP, 设 \(f_i\) 为状态 \(i\) 在数组的最大汉明距离,但等一下。

发现无论怎么做,这个 DP 都不好转移。

开始樟脑,一个数想在数组中找最大汉明距离,那么它取补码就变成找最小的了。因为每个有差异的位置都变得没差异了。

严谨一些,使用反证法:设找的数为 \(a\), 取补码后为 \(b\)
如果 \(b\) 找有最小距离的数,设其为 \(c\),如果 \(c\) 不是与 \(a\) 有最大距离的数,就说明还有更大距离的数 \(d\),但这样 \(d\)\(b\) 的距离就比 \(c\)\(b\) 小了。矛盾。

重设 \(f_i\) 为最小的距离。使用我为人人。

\(f_i+1 \to f_{i\oplus(1<<j)}\)

T3

传送门

\(f_i\) 为前 \(i\) 个字符以 \(i\) 结尾的连续字串出现 \(bessie\) 的次数。答案即为 \(\sum_{i=1}^{n}f_i\)

\(f_i=f_{j-1}+j\) 其中 \(j\) 为上一次出现 \(bessie\)\(b\) 的位置。同时为前面贡献 \(j\)

考虑求 \(j\)
遍历 \(i\) 时设 \(g_k\) 为上一次出现前 \(bessie\)\(i\) 个字符 \(b\) 的位置。列 \(6\) 个式子。
比如 \(g_3=g_2\)\(g_1=(s[i]==char(b))\)。注意要先 \(g_4=g_3\)\(g_3=g_2\)

posted @ 2026-07-14 18:39  Johnny904903  阅读(2)  评论(0)    收藏  举报