hack 题解并请求加强数据
查看原帖
hack 题解并请求加强数据
663681
C_liar楼主2023/2/14 08:17

rt。

以下三篇题解有问题:

https://www.luogu.com.cn/blog/Kaiser-Wilheim/solution-p8365 https://www.luogu.com.cn/blog/JSYZCHTHOLLY/solution-p8365 https://www.luogu.com.cn/blog/heruimiao123456/solution-p8365

hack 数据将会放在二楼,防止篇幅过长。

这里简要说明一下 hack 数据的大致结构及 hack 原理:

input:
1003
[1001 个 1] 2 2
[1000 个 1000000] 6 2 1
output:
0
wrong output:
4
未被取模的答案:
4000000028

原理:

以上三篇题解在代码实现中,均对 ai=1a_{i}=1bib_{i} 相加后取模,而这里不应该取模,因为题目中这样一句话:

注意:你需要最大化体重并将该最大值对 (109+7)\bm{({10}^9 + 7)} 取模,而非最大化体重对 (109+7)\bm{({10}^9 + 7)} 取模的结果。

但是这些题解的代码在错误地取模后仍能 AC。我猜是因为,在数据比较小的时候,取模根本没有影响;而数据比较大的时候,即使取模后,数据也会很大(大概 10710810^7\sim 10^8 数量级的数仍能贪心出正确结果)。所以使用随机数很难生成 hack 数据,必须手动构造。(也就是数据水

我这里直接构造一组数据,使得将 ai=1a_i=1bib_i 和初始值的相加之和为 109+710^9+7,取模后为 00,从而使下一步的贪心做出错误选择(先 +2+2 然后再 ×2\times 2),而不是先 ×2\times 2×2\times 2

这篇题解 甚至还强调了要取模,大概根本没有考虑到这种情况吧。

所以,建议管理员撤下相关题解并加强数据,可以把 hack 数据放在一个不计分的 subtask 里以警示后人。

2023/2/14 08:17
加载中...