Expectation (Easy Version) 2023“钉耙编程”中国大学生算法设计超级联赛(5)hdu7330

news/2024/10/17 14:31:03/

Problem - 7330

题目大意:有n次游戏,每次游戏有a/b的概率获胜,且相互独立,如果当前赢了cnt次游戏,那么这次游戏会赢得1^{m}+2^{m}+...+cnt^{m}的分数,问最后得分的期望

1<=n<=1e6;1<=m,a<=b<998244353

思路:因为每次事件相互独立,且只有输和赢两种结果,所以是一个二项分布,但每次事件的得分不同,所以要对赢几次分别求概率和得分相乘,最后再加起来就是总的期望,得分因为是递增的,所以用一个前缀和维护,每多赢一次,sum就加上赢得次数i的m次方。

概率就是二项分布的概率,C(i,n) *(\frac{a}{b})^{i}*(\frac{b-a}{b})^{n-i},分母固定为b^{n},我们只需要维护两个分子,分子1初始化为a,分子而初始化为(b-a)^{n-1},每次求完一次,分子1*a,分子2除以b-a。

然后注意到本题数据范围是1e6,且可能有10组1e6,如果O(nlogn)的话,超过1e8级别,比较极限,所以对于组合数也要预处理,即先预处理好1~1e6的阶乘数组和阶乘逆元数组,之后C(a,b)即b!/(a!(b-a)!)就可以O(1)求出

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 998244353;
const int N = 1e6 + 5;
ll inv[N], fac[N];
ll C(ll x, ll y)
{//C(x,y)=y!/((y-x)!x!)return fac[y] * inv[x] % MOD * inv[y - x] % MOD;
}
ll qpow(ll a, ll b)
{//快速幂ll ret = 1;while (b){if (b & 1){ret = ret * a % MOD;}a = a * a % MOD;b >>= 1;}return ret;
}
int main()
{int t;cin >> t;fac[0] = 1;inv[0] = 1;for (ll i = 1; i <= 1000000; i++){//预处理阶乘和阶乘逆元fac[i] = (fac[i - 1] * i) % MOD;inv[i] = qpow(fac[i], MOD - 2);}while (t--){int n, m;ll a, b;cin >> n >> m >> a >> b;ll sum = 0;ll ans = 0;ll temp1 = a;//分子1ll temp2 = qpow(b-a, n - 1);//分子2ll temp3 = qpow(qpow(b, n), MOD - 2);//分母ll temp4 = qpow(b - a, MOD - 2);//分子2每次*的逆元for (ll i = 1; i <= n; i++){//枚举n次里面赢几次的期望sum = (sum + qpow(i, m)) % MOD;//得分ll p = temp1 * temp2 % MOD * temp3 % MOD * C(i, n) % MOD;//概率ans = (ans + p * sum % MOD) % MOD;//期望和temp2 = temp2 * temp4 % MOD;temp1 = temp1 * a % MOD;}cout << ans << endl;}return 0;
}


http://www.ppmy.cn/news/998262.html

相关文章

PHP高级检索功能的实现以及动态拼接sql

我们学习了解了这么多关于PHP的知识&#xff0c;不知道你们对PHP高级检索功能的实现以及动态拼接sql是否已经完全掌握了呢&#xff0c;如果没有&#xff0c;那就跟随本篇文章一起继续学习吧! PHP高级检索功能的实现以及动态拼接sql。完成的功能有&#xff1a;可以单独根据一个…

开源项目-知识库管理系统(中国软件杯项目)

简述 哈喽,大家好,今天带来一个开源项目-知识库管理系统,项目通过Spring MVC技术实现。通过readme了解到这是某位大神大三暑假(2016年)参加第五届中国软件杯项目的源码。由三人团队完成(Yu yufeng\Zhou changqin\Liu chenzhe) 此作品获得了本科组全国二等奖。项目本身用…

LeetCode 39. 组合总和(回溯+剪枝)

题目&#xff1a; 链接&#xff1a;LeetCode 39. 组合总和 难度&#xff1a;中等 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 …

零基础学习编程(前端、Java、Python、大数据……)的一些建议

一、学习要明确动机和方向&#xff0c;有强烈的学习欲望 就自学前端来说&#xff0c;很多时候你其实都是孤独的&#xff0c;不知道到底学得怎么样&#xff0c;除非有强烈的欲望&#xff0c;不然大部分的新手很容易就会半途而废。 首先&#xff0c;要想明白自己学习编程的强烈…

MySQL 在CentOS下安装

yum安装 1、yum源安装 yum install mariadb-server2、启动MySQL服务 systemctl start mariadb3、查看运行状态 systemctl status mariadb4、设置初始密码 mysql -u rootuse mysql;update user set passwordpassword("root")where userroot;flush privileges;e…

C/C++几个关键知识点记录

1.将一个数值作为函数执行 (*(void(*)())0x13)();同理也可以将数值换成一个变量&#xff1a; int var0x13; (*(void(*)())var)();具体原理解释参考&#xff1a;https://blog.csdn.net/qq_39117115/article/details/128299574 2.断言assert 用于判断输入的参数是否正确&…

基于Ubuntu22.04部署bcache模式ceph

作者&#xff1a;吴业亮 博客&#xff1a;wuyeliang.blog.csdn.net 将Bcache集成到Ceph OSD后端可以带来一些优点和潜在的缺点。以下是它们的一些方面&#xff1a; 优点&#xff1a; 提高性能&#xff1a;BCache作为SSD缓存设备&#xff0c;可以提供更快的数据读取和写入速度…

实现 rollup 实现多模块打包

rollup 是一个 JavaScript 模块打包器&#xff0c;可以将许多 JavaScript 库和应用程序打包成少量的捆绑包&#xff0c;从而提高了应用程序的性能。本文详细描述如何通过 rollup 实现多模块打包。 前提 项目的目录结构 先看下项目的 package.json 文件夹&#xff1a; {&qu…