关于这道题必须使用 int128 的原因和卡爆 long long 的构造方法
查看原帖
关于这道题必须使用 int128 的原因和卡爆 long long 的构造方法
545986
Jerrycyx楼主2024/11/28 19:01

首先构造一条路径,形如下图:

上图中水流被分流 33 次,最终剩下 133\frac{1}{3^3}

数据范围中:

数据保证,污水在从一个接收口流向一个最终排水口的过程中,不会经过超过 1010 个中间排水结点(即接收口和最终排水口不算在内)。

即中间最多分流 1111 次,所以这样构造路径可以使最终水流达到 1311\frac{1}{3^{11}}

因为 di5d_i \le 5,所以用以上方法同样可以分流出 1411\frac{1}{4^{11}}1511\frac{1}{5^{11}},只需要将每一个节点的出度分别设为 4455

而上面三个分数的分母是互质的,所以让这三条路径流向同一个汇点,可以使分母达到 311×411×511=36,279,705,600,000,000,0003.6×10193^{11} \times 4^{11} \times 5^{11} = 36,279,705,600,000,000,000 \approx 3.6 \times 10^{19},而 long long 最大可存 26319.2×10182^{63}-1 \approx 9.2 \times 10^{18}unsigned long long 最大 26411.84×10192^{64}-1 \approx 1.84 \times 10^{19},均不足以存下极限分母。

而在边数很大(比如极限 5×1055 \times 10^5)时,这样的结构很容易出现(甚至不需要特别去构造),从而卡爆 (unsigned) long long

综上所述,必须要用 __int128(极限 1.7×10381.7 \times 10^{38})才可以过这道题。当然你愿意手写高精那当我没说。

2024/11/28 19:01
加载中...