Fake_Solution
前言
[warning]: 本题解的做法是错法,但是正确概率贼高。离谱的是正确率还可以叠加。
正解是记搜,时间复杂度可以证明。正解看文末。
思考
众所周知一个公式:
$$ a\times b=\operatorname{lcm}(a,b)\times \gcd(a,b) $$如果你不知道——自证吧,不难。
于是,移一下项可得
$$ \operatorname{lcm}(a,b)=\frac{ab}{\gcd(a,b)} $$那本题就是求这个玩意儿(设 $g(a,b)=\gcd(a,b)$, $g(X)=g(x_1,\dots,x_n)$)
$$ \frac{g(X)\times g(Y)}{g(g(X),g(Y))} $$关键是,我们怎么求得这个分数呢?
观察一手分母,实际上就是
$$ g(g(x_1,\dots,x_m),g(x_1,\dots,x_m))\\\Downarrow\\g(x_1,\dots,x_m,y_1,\dots,y_m)\\\Downarrow\\g(a_1,\dots,a_n) $$也就是说无论怎么放置卡片,分母是始终不变的。都可以根据给出的值求得。
分子怎么办呢?
由于是 $g(X)\times g(Y)$,我们可以试着贪心去取较大值。然后一路 $O(n)$ 下去就好了。
但是会有问题(极小概率),给个 hack。
|
|
但是,数据出现这种卡贪心的情况概率极低。Atcoder 的 70 组数据也就一组。
为了提高正确率,我们可以倒着再跑一次。
是的,你没听错,就是贪心 + 乱搞。
代码
code
|
|
Solution
还是补一个正解做法。其实直接记忆化爆搜就好了,时间复杂度可以证明通过本题限制~~(虽然我不会)~~。
代码
code
|
|