THUWC 2025 题目资源
THUWC/THUSC 工程题
https://www.luogu.com.cn/team/44709
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\)。
三分以前的部分已经在考场上实践了,正确性有保证。