LOJ6587 WF2019 交通堵塞 CRT

传送门


首先设(P = lcm(r_i + g_i)),因为(P mid 2019!),所以在([0,2019!])里随机实数相当于在([0,2019!))随机实数,相当于在([0,P))内随机整数。

需要求出被每扇门关住的概率,不妨算出通过前若干扇门的概率后差分。求出通过前(i)扇门的概率相当于(i)个模意义下的区间求交,可以做到(O(NP))但是显然太慢。

考虑:有两个模意义下的方程(x in S_1 mod P)(x in S_2 mod Q)(P perp Q),则由中国剩余定理可知,如果同时满足这两个条件的数集是(x in S mod PQ),那么(|S|=|S_1||S_2|)。这提示着我们两个互质的是独立的,可以独立计算概率。

同时如果(P mid Q)或者(Q mid P),可以快速合并。那么假如所有(r_i + g_i)都能写成(p^k)的形式就可以快速计算答案。

但实际上并不是这样,所以考虑转化模数。

枚举(a in [0,X)),将开始时间等于(t = kX + a(k in Z))的所有时间点放在一起做。在上面的做法中(X = 1),在这里不可行。可以注意到:(kX + a in S mod p)只和(k mod frac{p}{gcd(p , X)})有关,只需要让所有(frac{p}{gcd(p,X)})只存在一个质因子即可满足上面的条件。可以求出最小的(X = 2520)

这样我们可以枚举(k)([0 , frac{p}{gcd(p , X)}))中的合法值,再按照上面的做法做。复杂度 (O(100XN))

代码

原文地址:https://www.cnblogs.com/Itst/p/10924475.html