嘘~ 正在从服务器偷取页面 . . .

洛谷P3802 小魔女帕琪 题解


洛谷P3802 小魔女帕琪 题解

题目链接:P3802 小魔女帕琪

题意

从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼。

帕琪能熟练使用七种属性(金、木、水、火、土、日、月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从而唱出强力的魔法。比如说为了加强攻击力而将火和木组合,为了掩盖弱点而将火和土组合等等,变化非常丰富。

现在帕琪与强大的夜之女王,吸血鬼蕾咪相遇了,夜之女王蕾咪具有非常强大的生命力,普通的魔法难以造成效果,只有终极魔法:帕琪七重奏才能对蕾咪造成伤害。帕琪七重奏的触发条件是:连续施放的 \(7\) 个魔法中,如果魔法的属性各不相同,就能触发一次帕琪七重奏。

请注意,无论前 \(6\) 个魔法是否已经参与施放终极魔法,只要连续 \(7\) 个魔法的属性各不相同,就会再触发一次终极魔法。例如,如果用序号来代表一种魔法,魔法的施放序列为 \(1, 2, 3, 4, 5, 6,7, 1\),则前 \(7\) 个魔法会触发一次终极魔法,后 \(7\) 个魔法会再触发一次终极魔法。

现在帕琪有 \(7\) 种属性的能量晶体,第 \(i\) 种晶体可以施放出属性为 \(i\) 的魔法,共有 \(a_i\) 个。每次施放魔法时,会等概率随机消耗一个现有的能量晶体,然后释放一个对应属性的魔法。

现在帕琪想知道,她触发帕琪七重奏的期望次数是多少,可是她并不会算,于是找到了学 OI 的你。

输入格式

输入只有一行 \(7\) 个整数,第 \(i\) 个整数代表 \(a_i\)

输出格式

输出一行一个实数代表答案,四舍五入保留三位小数。

数据范围

对于 \(100\%\) 的数据,保证 \(0 \leq a_i \leq 10^9\),且 \(\sum_{i = 1}^7 a_i \leq 10^9\)

居然是道纯数学题。(有一说一,这个“帕琪七重奏”有种莫名的优雅

注意到每次触发帕琪七重奏其实和之前触发是无关的。因为 \(1\sim 7\) 放招了以后,\(2 \sim 8\) 还可以放。

考虑前 \(7\) 个触发帕琪七重奏的概率。记 \(N = \sum a_i\) ,则 \[ \mathrm{Pr}_1 = 7!\times\frac{a_1}{N} \times \frac{a_2}{N-1} \times \frac{a_3}{N-2} \times \frac{a_4}{N-3} \times \frac{a_5}{N-4} \times \frac{a_6}{N-5} \times \frac{a_7}{N-6} \] 前面的 \(7!\) 对应了 \(a_1,a_2,\cdots,a_7\) 的不同排列,显然这样的次序不会影响触发帕琪七重奏

然后考虑第一个取出的元素固定为 \(a_1\) 时,接下来的 \(7\) 个触发帕琪七重奏。 \[ \mathrm{Pr}_{2,1} =7!\times \frac{a_1}{N} \times \frac{a_2}{N-1} \times \frac{a_3}{N-2} \times \frac{a_4}{N-3} \times \frac{a_5}{N-4} \times \frac{a_6}{N-5} \times \frac{a_7}{N-6} \times \frac{a_1-1}{N-7} \] 再试试固定为 \(a_2\)\[ \mathrm{Pr}_{2,2} =7!\times \frac{a_2}{N} \times \frac{a_1}{N-1} \times \frac{a_3}{N-2} \times \frac{a_4}{N-3} \times \frac{a_5}{N-4} \times \frac{a_6}{N-5} \times \frac{a_7}{N-6} \times \frac{a_2-1}{N-7} \] 以上 \(7!\) 均为第一个元素固定时,第 \(2 \sim 8\) 个元素的排列。

而我们可以发现 \[ \sum_{i = 1}^7 \frac{a_i - 1}{N - 7} = 1 \] 因此 \[ \mathrm{Pr}_2 = 7 ! \times \frac{a_1}{N} \times \frac{a_2}{N-1} \times \frac{a_3}{N-2} \times \frac{a_4}{N-3} \times \frac{a_5}{N-4} \times \frac{a_6}{N-5} \times \frac{a_7}{N-6} \] 震惊,每一个连续 \(7\) 项的贡献都是一样的。小编也觉得很奇怪,但事实就是这样

而这样的项有 \(N-6\) 个,因此最终的答案为 \[ \mathrm{Pr}_0 = 7 ! \times \frac{a_1}{N} \times \frac{a_2}{N-1} \times \frac{a_3}{N-2} \times \frac{a_4}{N-3} \times \frac{a_5}{N-4} \times \frac{a_6}{N-5} \times a_7 \] 时间复杂度 \(\mathcal{O}(1)\)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
void up(int &x,int y) { x < y ? x = y : 0; }
void down(int &x,int y) { x > y ? x = y : 0; }
#define N ((int)())

double s, res = 1, a[15];
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    // freopen("check.in","r",stdin);
    // freopen("check.out","w",stdout);
    for(int i=1; i<=7; i++){ cin >> a[i]; s += a[i]; }
    for(int i=1; i<=6; i++) res = res * a[i] / (s + 1 - i) * i;
    res = res * a[7] * 7;
    cout << fixed << setprecision(3) << res << '\n';
    return 0;
}

参考文献

[1] https://www.luogu.com.cn/blog/ButterflyDew/solution-p3802


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录