0%

2025 ICPC Asia Manila Regional(2025 ICPC 亚洲 菲律宾 马尼拉)——D. Drinking Culture(把概率,转化为可行域面积占总面积的比重,这一点对两参数随意取的概率问题特别有用,三参数随意取的就是算体积占比?我猜)

题目大意

题目总结

Bob 有 nn 瓶酒精饮料,标号为 11nn。已知第 ii 瓶饮料包含 viv_i 单位的液体体积,其中有 aia_i 单位是纯酒精(0aivi0 \le a_i \le v_i)。因此,第 ii 瓶饮料的酒精浓度为 ai/via_i / v_i。每瓶饮料是完全均匀的,从中取出任意体积的液体,其酒精浓度均保持不变。

Bob 可以从这些瓶子中选择任意组合,并从每瓶中取出任意体积(不必须为整数)的液体进行混合。

现在提出一个挑战:
V=i=1nviV = \sum_{i=1}^n v_i 为所有瓶子中液体的总体积。
[0,V][0, V] 区间内均匀随机生成一个实数 ss(目标总体积)
[0,1][0, 1] 区间内均匀随机生成一个实数 ff(目标酒精浓度)

请计算:Bob 能够成功调配出总体积恰好为 ss、且酒精浓度恰好为 ff 的饮品的概率是多少?(输出结果与标准答案的绝对或相对误差需不超过 10810^{-8})。

输入格式
第一行包含一个整数 nn2n2×1052 \le n \le 2 \times 10^5)。
第二行包含 nn 个整数,依次为 v1,v2,,vnv_1, v_2, \dots, v_n1vi1091 \le v_i \le 10^9)。
第三行包含 nn 个整数,依次为 a1,a2,,ana_1, a_2, \dots, a_n0aivi0 \le a_i \le v_i)。

样例输入

1
2
3
3
350 750 330
140 131 16

样例输出

1
0.19356182654786474591

样例解释
在这个样例中,所有液体的总体积 V=350+750+330=1430V = 350 + 750 + 330 = 1430

我们可以考虑两种具体的情况:
第一种情况:假设生成的 s=500s = 500f=313f = \frac{3}{13}。此时 Bob 是可以成功调配的。例如,他可以从第 11 瓶中取出 97750377\frac{97750}{377} 单位的液体,从第 33 瓶中取出 90750377\frac{90750}{377} 单位的液体。
调配出的总体积为 97750377+90750377=188500377=500\frac{97750}{377} + \frac{90750}{377} = \frac{188500}{377} = 500
调配出的酒精浓度为:

97750377×140350+90750377×16330500=313 \frac{\frac{97750}{377} \times \frac{140}{350} + \frac{90750}{377} \times \frac{16}{330}}{500} = \frac{3}{13}

第二种情况:假设生成的 s=814s = 814f=0.1234567f = 0.1234567。此时 Bob 是无法完成调配的,因为利用他现有的饮料集合无法混合出该体积和浓度的饮品。

综合考虑所有可能在给定范围内均匀生成的 ssff 的数值对 (s,f)(s, f),Bob 能够成功调配的概率约为 0.193561826547864745910.19356182654786474591

思路讲解

概率转化为可行域面积占总面积的比重,这一点对两参数随意取的概率问题特别有用。

image

具体而言,我们的这个分段函数应该长这样:

image

其不定积分是长这样的,带进去值,算一下定积分即可。

image

AC代码

AC
https://qoj.ac/submission/2106344
AC
https://codeforces.com/gym/106262/submission/365722146

心路历程(WA,TLE,MLE……)

注意,分段函数不是线性的,而是一个分段反比例函数。

image

不要一会用 x,一会用 v,但是代表同一个意思。

image