『数学期望』某次模拟赛T1

2023-10-13 12:38
文章标签 模拟 数学 t1 期望 某次

本文主要是介绍『数学期望』某次模拟赛T1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P r o b l e m \mathrm{Problem} Problem

在这里插入图片描述

S o l u t i o n \mathrm{Solution} Solution

做一类期望题我们无法确定未来的行为,但是存在未来行为的边界,我们可以选择逆向做期望DP来解决这类问题。

我们设 f i f_i fi表示当前已经取走了i张牌,接下来还要取的期望排数。

那么,我们需要遵循概率和为1的原则列出状态转移方程。

  • 取走已经取走的, P = i n \mathrm P=\frac{i}{n} P=ni,由于接下来不取了,期望取 1 1 1次。
  • 取走没有取走的, P = n − i n \mathrm P=\frac{n-i}{n} P=nni,此时取走了 i + 1 i+1 i+1张,那么期望当前 1 1 1次,接下来 f i + 1 f_{i+1} fi+1次。

然后就有转移方程: f [ i ] = i n × 1 + n − i n × ( f [ i + 1 ] + 1 ) f[i]=\frac{i}{n}\times 1+\frac{n-i}{n}\times(f[i+1]+1) f[i]=ni×1+nni×(f[i+1]+1)

然后我们递推求解即可。

C o d e \mathrm{Code} Code

#include <cstdio>
#include <iostream>using namespace std;
const int N = 2e7;
const int P = 998244353;int f[N];int read(void)
{int s = 0, w = 0; char c = getchar();while (c < '0' || c > '9') w |= c == '-', c = getchar();while (c >= '0' && c <= '9') s = s*10+c-48, c = getchar();return w ? -s : s;
}int power(int a,int b) {int res = 1;while (b > 0) {if (b & 1) res = 1LL * res * a % P;a = 1LL * a * a % P, b >>= 1;}return res;
}void write(int x) {if (x > 9) write(x/10);putchar(x%10+48);
}int work(void)
{int n = read(),Inv = power(n,P-2);f[n] = 1;for (int i=n-1;~i;--i) f[i] = (1LL*i*Inv+1LL*(f[i+1]+1)*(n-i)%P*Inv%P)%P;return f[0];
}int main(void) 
{freopen("a.in","r",stdin);freopen("a.out","w",stdout);int T = read();while (T --) {write(work());putchar('\n');}return 0;
}

这篇关于『数学期望』某次模拟赛T1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/203272

相关文章

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col