THUWC 2025 题目资源

THUWC/THUSC 工程题

https://www.luogu.com.cn/team/44709

https://duck.ac

https://www.luogu.com.cn/feed/watching?page=1

T3 题目

时限:\(6s\)

给定一个长度为 \(n\) 只包含 \(1,2,3\) 的序列,你需要从中选出一个长度为 \(k\) 的子序列,最大化 \(s\) 的值(\(s\) 初始为 \(0\)),对 \(998244353\) 取模。

\(1\) 操作表示:\(s\leftarrow s+A\)

\(2\) 操作表示:\(A\leftarrow A+B\)

\(3\) 操作表示:\(s\leftarrow 2s\)

其中 \(n,k,A,B\) 都是给定的。有多测。

\(0\leq A,B\leq256\)

\(T\leq\) \(n\leq\) 特殊性质
\(10\) \(10\)
\(10\) \(400\) \(3\) 的个数不超过 \(20\)
\(10\) \(18\)
\(10\) \(10^3\)
\(10\) \(5\times 10^4\) \(3\) 的个数不超过 \(20\)
\(10\) \(5\times 10^4\)
\(1\) \(3\times 10^5\)

T4 题面

时限:\(2s\)

给定一个长度为 \(n\) 只包含字母 \(A,B\) 的字符串。\(q\) 次询问,每次询问独立,你有变量 \(x,s\),初始均为 \(0\),你需要指定 \(k\) 的值,使得在经过 \([l,r]\) 内的操作后,\(s\) 的值最大。

\(A\) 操作表示:先让 \(x\leftarrow x+1\),如果 \(x\gt k\),让 \(x\leftarrow x-1,s\leftarrow s+8\)

\(B\) 操作表示:如果 \(x\gt 0\),让 \(x\leftarrow x-1,s\leftarrow s+16\)

进行完所有操作后,再让 \(s\leftarrow s+3\times x\)

\(n\leq\) \(q\leq\) 特殊性质
\(100\) \(100\)
\(10^5\) \(10^3\)
\(5\times 10^4\) \(5\times 10^4\)
\(5\times 10^5\) \(5\times 10^5\) \(B\) 操作不超过 \(100\)
\(5\times 10^5\) \(1\) \(l=1,r=n\)
\(5\times 10^5\) \(5\times 10^5\) \(l=1\)
\(5\times 10^5\) \(5\times 10^5\)

T4 题解

先把序列中第一个 \(1\) 前面的 \(3\) 扔掉。

\(1,2,3\) 拆成 \(3\) 个序列,根据调整法,最终的序列中 \(3\) 一定是后缀,\(2\) 一定是前缀。

假设原序列 \(3\) 的个数为 \(x\),最终一定会选 \([\min(x,k)-20,\min(x,k)]\)\(3\),否则直接选所有 \(3\) 一定更优。考虑直接枚举答案序列中 \(3\) 的数量。

把贡献拆到每个 \(1\) 上,每个 \(1\) 的贡献就是 \((A+B\times 它前面 2 的个数)\times 2^{它后面 3 的个数}\)。然后枚举 \(2\) 的数量,这样序列中每个 \(1\) 的贡献就是确定的,所以直接排序选前几个就行。

对于高精的计算:考虑在 \(2\) 进制下计算答案,答案位数不超过 \(n+\log\) ,因为每个 \(1\) 的贡献都可以表示为上面那个式子,所以可以直接在数组下标为 \(它后面 3 的个数\) 的位置加上 \(A+B\times 它前面 2 的个数\),加完所有 \(1\) 的贡献后再统一处理进位即可。然后逐位比较对答案取 \(\max\)

直接做是 \(n^2\) 的。我猜测答案关于 \(2\) 的个数是单峰函数,所以可以三分。

目前时间复杂度为 \(20 n\log^2 n\),无法通过,考虑先将所有 \(2\) 都选上,对 \(1\) 排序,然后在三分时,最后一个 \(2\) 之后的 \(1\) 一定会选一个前缀,最后一个 \(2\) 之前的 \(1\) 的顺序已经确定,可以对两个序列做归并排序,即可分离 \(\log\)

时间复杂度:\(20 n\log n\)

三分以前的部分已经在考场上实践了,正确性有保证。

posted @ 2025-03-06 21:58  born_to_sun  阅读(37)  评论(0)    收藏  举报