小魔女帕琪题解

题目背景

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

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

题目描述

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

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

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

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

输入格式

输入只有一行 7 个整数,第 i 个整数代表 ai​。

输出格式

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

输入输出样例

输入 #1复制

1 1 1 1 1 1 1

输出 #1复制

1.000

说明/提示

样例输入输出 1 解释

显然一定会触发一次帕琪七重奏。

数据规模与约定
  • 对于 30% 的数据,保证 ∑i=17​ai​≤10。
  • 对于 100% 的数据,保证 0≤ai​≤109,且 ∑i=17​ai​≤109。

思路

DP。

代码见下

#include<bits/stdc++.h>
using namespace std;
double a[10],lk=1.00,zs=0;
int main(){
	for(int i=1;i<=7;i++){
        cin>>a[i];
        zs+=a[i];
    }
    for(int i=1;i<=6;i++){
        lk=lk*a[i]/(zs+1-i)*((double)i);
    }
    lk=lk*a[7]*7.00;
    printf("%.3lf\n",lk);        
    return 0;
}

posted @ 2025-10-15 22:01  bz02_2023f2  阅读(19)  评论(0)    收藏  举报  来源