提供一个对第二篇题解(@Gary818)的 Hack:
Input:
150
141 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Output:
4709614623714
原理是让 (d1n−2) 超过 int 范围即可。
但只要改成 long long 就卡不住了。
因为答案是 ∏i=1k(di−1)!(n−2)!,Hack 的目标是让 (d1n−2)=d1!×(n−2−d1)!(n−2)! 超过 long long 范围,而我们要让答案 ≤1017,因此从贪心角度看应该是无法 Hack 的。(而且这篇题解思路也很妙,不建议撤下,改一下就行)
然后顺便发现有 2 篇题解也无法通过:
@玫葵之蝶
这个是因为对 di 暴力算了阶乘,所以 di 大了就错了。
@star_eternal
这个代码预处理阶乘只处理了 22 个,因此 n 大就会挂掉。