期望
期望
定义
如果
则
例题
Revenge of "The Salary of AtCoder Inc."
[ABC326E] Revenge of "The Salary of AtCoder Inc."
青木是 AtCoder 公司的一名员工,他本月的工资由整数
首先,给他一个
然后,重复以下步骤直到结束。
- 掷一次骰子,让
成为结果。- 如果是
,付给他 日元,让 。 - 否则,终止该过程。
- 如果是
青木这个月的工资就是通过这个过程支付的总额。
求青木本月工资的对
思路:
根据期望的线性,工资的总期望
则
其中 表示在 j 这个点,掷骰子掷到 i
是一个整体。
可以用前缀和优化计算
code:
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int MAXN = 3e5 + 7;
const int MOD = 998244353;
int n;
int p[MAXN],prep[MAXN],a[MAXN];
int qpow(int a,int x){
int res = 1;
while(x){
if(x & 1) res = res * a % MOD;
a = a * a % MOD;
x >>= 1;
}
return res;
}
signed main(){
scanf("%lld", &n);
for(int i = 1;i <= n;i++) scanf("%lld", &a[i]);
p[0] = 1,prep[0] = 1;
for(int i = 1;i <= n;i++){
p[i] = prep[i - 1] * qpow(n,MOD - 2) % MOD;
prep[i] = (prep[i - 1] + p[i]) % MOD;
}
int ans = 0;
for(int i = 1;i <= n;i++){
(ans += (a[i] * p[i])) %= MOD;
}
printf("%lld", ans);
return 0;
}
Coupons
每张彩票上有一个漂亮图案,图案一共n种,如果你集齐了这n种图案就可以~~~~兑换大奖。
现在请问,在理想(平均)情况下,你买多少张彩票才能获得大奖的?
思路:
设
则:
我们归纳化简:
循环统计答案即可.
我们分析过程:
分析结束,式子成立,无代码.
收集邮票
有
现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。
首先我们设
那么易知
则
但是题目中的条件是 购买第k次邮票需要支付k元钱
,所以我们需要设
所以:
化简得到:
最后输出 dp[0]
即可。
code:
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1e4 + 7;
int n;
double f[MAXN];
double dp[MAXN];
int main(){
scanf("%d", &n);
for(int i = n - 1;i >= 0;i--) f[i] = f[i + 1] + n * 1.0 / (n - i);
for(int i = n - 1;i >= 0;i--) dp[i] = dp[i + 1] + 1 + f[i + 1] + i * (1 + f[i]) / (n - i);
printf("%.2lf", dp[0]);
return 0;
}
代码超短。
OSU!
一共有
现在给出
我们考虑第
观察式子,我们发现我们需要知道
则我们设
但是我们的答案不是单独一个点对整个序列产生分数的期望,所以要改一下三次方的式子:
答案就是
code:
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1e5 + 7;
double x1[MAXN],x2[MAXN],x3[MAXN];
int n;
double p[MAXN];
int main(){
cin >> n;
for(int i = 1;i <= n;i++) cin >> p[i];
for(int i = 1;i <= n;i++) x1[i] = (x1[i - 1] + 1) * p[i];
for(int i = 1;i <= n;i++) x2[i] = (x2[i - 1] + 2 * x1[i - 1] + 1) * p[i];
for(int i = 1;i <= n;i++) x3[i] = x3[i - 1] + (3 * x2[i - 1] + 3 * x1[i - 1] + 1) * p[i];
printf("%.1lf", x3[n]);
return 0;
}
P8774 爬树的甲壳虫
有一只甲壳虫想要爬上一颗高度为
做法一:
设 先回树根,花费1的时间,然后花费f[i]时间回到i节点
时间为
那么:
化简得:
code:
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN = 1e5 + 7;
const int MOD = 998244353;
int n,x[MAXN],y[MAXN];
int f[MAXN];
int qpow(int a,int x){
int res = 1;
while(x){
if(x & 1) res = res * a % MOD;
a = a * a % MOD;
x >>= 1;
}
return res;
}
signed main(){
cin >> n;
for(int i = 1;i <= n;i++) cin >> x[i] >> y[i];
for(int i = 1;i <= n;i++){
f[i] = (f[i - 1] + 1) * y[i] % MOD * qpow(y[i] - x[i],MOD - 2) % MOD;
f[i] %= MOD;
}
cout << f[n];
return 0;
}
本文来自博客园,作者:wyl123ly,转载请注明原文链接:https://www.cnblogs.com/wyl123ly/p/18546662
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!