社区讨论

hack 题解并请求加强数据

P8365[LNOI2022] 吃参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo34w49p
此快照首次捕获于
2023/10/24 00:50
2 年前
此快照最后确认于
2023/10/24 00:50
2 年前
查看原帖
rt。
以下三篇题解有问题:
hack 数据将会放在二楼,防止篇幅过长。
这里简要说明一下 hack 数据的大致结构及 hack 原理:
CPP
input:
1003
[10011] 2 2
[10001000000] 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 里以警示后人。

回复

4 条回复,欢迎继续交流。

正在加载回复...