本文主要是介绍B - Genshin Impact(合肥站),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:
- 条件:给出连续的y时间段,分段处尝试点燃;
- 点燃概率:1/p,点燃时间为x;
- 问题:求相对于y,燃烧时间x的覆盖比例期望;
- x <=y: 覆盖期望显然是 x/p/y;
- x > y: x对于y的覆盖有y,x%y,以及不覆盖三种情况;
- x%y : 若第一次命中,x/y次不命中,则覆盖x%y;
Y:第一次无论是否命中, x/y次至少命中一次则全覆盖;
无:三次都不命中;
7.于是有:
Ans = (X%y*(1/p)*(1 -1/p)^(x/y) + y*(1 - (1 -1/p)^(x/y) ) ) / y;
代码:
#include <bits/stdc++.h>
using namespace std;typedef long long ll;
#define int ll
#define endl '\n'const int inf = 0x3f3f3f3f3f3f3f3f;
const int N = 2e5 + 10;signed main() {ios::sync_with_stdio(false);int T = 1;cin >> T;while (T--) {int x, y, p;cin >> x >> y >> p;int n = x / y;long double ans = 0;long double _p = 1.0 - 1.0 / p;long double res = 1.0;for (int i = 0; i < n; i++) {res *= _p;}ans = res*(x%y)+ y * p * (1 - res);ans /= y * p;printf("%.15Lf",ans);return 0;}
}
这篇关于B - Genshin Impact(合肥站)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!