本文主要是介绍DTOJ 4746. 我家钥匙放在哪了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意
张士超是你在上海音乐学院的基友,关系非常好。你们在五角场附件合租了一间屋子。由于你那么有钱,一下买了 n n n 把相同的锁,并一下配了 N N N 把相同的钥匙。你用这些锁并联锁住你家的大门,需要同时插入 n n n 把钥匙才能打开。
一天晚上,张士超带着华师大的姑娘去了闵行。而且还把你们的 N N N 把钥匙全部藏在了一些奇怪的地方。
张士超有 M M M 个可能的地方来藏钥匙,比如地毯,花园,或门口大爷。每处藏匿位置至多可容纳 a i a_i ai 把钥匙,并且有 p i p_i pi 的独立概率被你找到。当然如果一个位置被你找到了,你就会拿到这里的所有钥匙。你必须至少拿到其中 n n n 把钥匙才能回家。
假设张士超按所有合法方案中的任何一种方案放钥匙的概率相同。现在你希望算出你可以找到钥匙顺利回家的概率,如果这个概率太小,就干脆打车跑到闵行去把张士超痛扁一顿。
张士超在闵行乐不思蜀,你却在五角场无家可归。你必须在2s内算出答案,否则就会在寒风凛冽的国定路被冻死。
对 998244353 998244353 998244353 取模。为避免除法可能出现的问题,请输出答案乘上合法方案总数的积,即放钥匙的所有方案中能回家的概率之和。合法方案即一个数组 0 ≤ b i ≤ a i 0 \le b_i \le a_i 0≤bi≤ai 满足 0 ≤ b i ≤ a i , ∑ i b i = N 0 \leq b_{i} \leq a_{i}, \sum_{i} b_{i}=N 0≤bi≤ai,∑ibi=N
所有测试数据满足 1 ≤ M ≤ 100 , 1 ≤ n ≤ N ≤ ∑ a i , 1 ≤ N , a i ≤ 1 0 9 , 1 ≤ d ≤ 1 0 7 , 0 ≤ p i < 998244353 , N ≤ 100 d , d ∣ ( a i + 1 ) 1 \leq M \leq 100,1 \leq n \leq N \leq \sum a_{i}, 1 \leq N, a_{i} \leq 10^{9}, 1 \leq d \leq 10^{7}, 0 \leq p_{i}<998244353,N \leq 100 d, d |\left(a_{i}+1\right) 1≤M≤100,1≤n≤N≤∑ai,1≤N,ai≤109,1≤d≤107,0≤pi<998244353,N≤100d,d∣(ai+1),但并不保证 d ∣ N d | N d∣N 或 d ∣ n d | n d∣n
Other Constraints | M , N M,N M,N | P o i n t s Points Points |
---|---|---|
a i ≤ 10 a_i \le 10 ai≤10 | M ≤ 6 M \le 6 M≤6 | 10 |
n = 1 n=1 n=1 或 n = N n=N n=N | N ≤ 100 N \le 100 N≤100 | 5 |
n = 1 n=1 n=1 或 n = N n=N n=N | 15 | |
p i ∈ { 0 , 1 } p_{i} \in\{0,1\} pi∈{0,1} | N ≤ 100 N \le 100 N≤100 | 5 |
p i ∈ { 0 , 1 } p_{i} \in\{0,1\} pi∈{0,1} | 15 | |
No More Constraints | N ≤ 100 N \le 100 N≤100 | 30 |
No More Constraints | 20 |
题解
注意到 N ≤ 100 d N\le100d N≤100d,考虑每个位置先选若干个 d d d,最后把剩下的分给每个位置,要求每个位置少于 d d d。考虑 n n n的限制,如果概率都是 0 0 0或 1 1 1,即在 p = 1 p=1 p=1位置要放的数总和不少于 n n n;考虑把每一种可能性以概率的积的形式记在DP中,先DP出总共放了 i i i个 d d d,在选的位置放了 j j j个 d d d,选了 k k k个位置的概率总和。
剩下的问题在于把 x x x个数放到 M M M个位置,每个位置小于 d d d,前 k k k个位置放不少于 y y y个。考虑后者,由于 M M M较小,考虑枚举第 y y y个数在哪个位置,再乘上组合数即可。对于前者,在DP的时候直接容斥,即当前的位置若选了不少于 d d d个就 ∗ − 1 *-1 ∗−1。这样就做完了,效率为 O ( n 4 ) O(n^{4}) O(n4)。
这篇关于DTOJ 4746. 我家钥匙放在哪了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!