P6046 纯粹容器

纯粹容器 - 洛谷

首先先看几个通用的知识点:

1.费马小定理+快速幂求逆元(求倒数)

当mod为质数的时候可以使用费马小定理

ll ksm(int x, int y) {if (x == 1) return 1;ll res = 1, base = x;while (y) {if (y & 1) res = (res * base) % mod;base = (base * base) % mod;y >>= 1;}return res;
}
int inv(int aim)//inverse element{return ksm(aim, mod - 2);
}

2.动态规划预处理组合数

i个里面选j个

公式:C[i][j] = C[i-1][j] +C[i-1][j-1] 。

组合公式理解, 从 i 里选 j 个的方案数由两部分,设k是 i 中某一个, 则选取 k 和不选取 k :C[i-1][j] + C[i-1][j-1]

(第i个选或不选)

初始化 C[ i ][ 0 ] = 1; (起源都算一种)

int C[105][105] = { 0 };
C[0][0] = 1;for (int i = 1; i <= n; i++){C[i][0] = 1;for (int j = 1; j <= i; j++){C[i][j] = (C[i - 1][j] + C[i-1][j - 1]) % mod;}}

3.单调栈本题做法

每个数(的下标)都入栈,当栈顶数小于当前数的时候,为栈顶数记录同时pop

期望的定义:

(大学概率论有)

将期望转化成概率求和的原理涉及到概率论中的期望值的定义。期望值是随机变量的加权平均值,而这个加权是根据每个可能结果发生的概率来进行的。

具体来说,对于一个离散型随机变量X,其期望值E(X)可以表示为:

E(X) = Σ x * P(X=x)

其中,x表示随机变量X可能取到的值,P(X=x)表示X取到值x的概率。

对于一个连续型随机变量X,其期望值E(X)可以表示为:

E(X) = ∫ x * f(x) dx

其中,f(x)表示X的概率密度函数。

因此,将期望转化成概率求和的原理就是根据每个可能结果发生的概率,将每个结果乘以对应的概率,然后将所有结果的加权平均值作为期望值。

本题期望:

“请你对每个容器求出它存活轮数的期望”

E = 求和 :存活i轮*存活i轮的概率

然而许多题解给出了这样的式子,

其实就是上式的转化

(我在此忏悔,这个式子不是我推的,我来第一步都没有列,脑子硬想,,)

样例解释:

对于输入#1有两种情况:

先碰3 1,然后碰2

或者先碰1 2,然后碰3

每种情况,3都能活2回合,2都能活1回合,1都是第一次就碎掉。

对于输入#2也是两种:

先碰12再碰3                        1活0,2活1,3活2

或者先碰23再碰1                1活1,2活0,3活2

按定义的期望计算:

1: 活一次 1/2

2:活一次1/2

求逆元即使输出:

代码:

int C[105][105] = { 0 };
ll ksm(int x, int y) {if (x == 1) return 1;ll res = 1, base = x;while (y) {if (y & 1) res = (res * base) % mod;base = (base * base) % mod;y >>= 1;}return res;
}
int inv(int aim)//inverse element{return ksm(aim, mod - 2);
}
void solve(int c)
{int n;cin >> n;vector<int>arr(n + 2);vector<int>left(n + 2);vector<int>right(n + 2);stack<int>st1,st2;for (int i = 1; i <= n; i++){cin >> arr[i];}//“单调栈,为栈内右边最近的大的,所以现存栈内都是逆序小的,遇到大的挨着出栈for (int i = 1; i <= n; i++){while (st1.size() && arr[i] > arr[st1.top()]){right[st1.top()] = i-st1.top();st1.pop();}st1.push(i);}for (int i = n; i >= 1; i--){while (st2.size() && arr[i] > arr[st2.top()]){left[st2.top()] = st2.top()-i;st2.pop();}st2.push(i);}//组合数处理:C[0][0] = 1;for (int i = 1; i <= n; i++){C[i][0] = 1;for (int j = 1; j <= i; j++){C[i][j] = (C[i - 1][j] + C[i-1][j - 1]) % mod;}}for (int i = 1; i <= n; i++){int ans = 0;for (int j = 1; j < n; j++)//轮数{int la = 0, lb = 0, lab = 0;if (left[i] && j >= left[i]){//la = C[n-1-left[i]][j-left[i]] / C[n-1][j];la = C[n-1-left[i]][j-left[i]] * inv( C[n-1][j])%mod;}if (right[i] && j >= right[i]){lb = C[n - 1 - right[i]][j - right[i]] * inv(C[n - 1][j]) % mod;}if (left[i] && right[i] && j >= left[i] + right[i]){lab = C[n-1-left[i]-right[i]][j-left[i]-right[i]] *inv( C[n - 1][j])%mod;}ans = (ans + 1 + mod - la + mod - lb + lab) % mod;}cout << ans << " ";}}signed main()
{//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;for (int i = 1; i <= t; i++){solve(i);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2778501.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

利用Python画布之乌龟的爬行

一.基础操作 1.引入turtle库 首先&#xff0c;在你的Python代码中引入turtle库&#xff0c;代码如下&#xff1a; import turtle 2.创建画布 要创建一个画布&#xff0c;你可以使用turtle库中的Screen类。Screen类提供了一个窗口&#xff0c;你可以在其中创建一个画布。下…

AI新工具(20240210) Osam - Osam是一个启用本地运行的开源llm;Whishper - Whishper是一个开源的语音工具

Osam - Osam是一个启用本地运行的开源“一切分割”模型工具&#xff0c;支持多种接口和自定义视觉模型。 Osam是一个开源工具&#xff0c;它允许本地运行“可对任何内容进行分割”的模型(Segment-Anything Models)&#xff0c;灵感来源于Ollama。使用Osam&#xff0c;用户可以…

Android---Jetpack Compose学习002

Compose 布局。Compose 布局的目标&#xff1a;1&#xff09;实现高性能&#xff1b;2&#xff09;让开发者能够轻松编写自定义布局&#xff1b;3&#xff09;在 Compose 中&#xff0c;通过避免多次测量布局子级可实现高性能。如果需要进行多次测量&#xff0c;Compose 具有一…

13. 串口接收模块的项目应用案例

1. 使用串口来控制LED灯工作状态 使用串口发送指令到FPGA开发板&#xff0c;来控制第7课中第4个实验的开发板上的LED灯的工作状态。 LED灯的工作状态&#xff1a;让LED灯按指定的亮灭模式亮灭&#xff0c;亮灭模式未知&#xff0c;由用户指定&#xff0c;8个变化状态为一个循…

02 数据库管理 数据表管理

文章目录 数据库管理数据表管理基础数据类型表的基本操作 数据库管理 查看已有库 show databases; 创建库 create database 库名 [character set utf8]; e.g. 创建stu数据库&#xff0c;编码为utf8 create database stu character set utf8; create database stu charsetutf8;…

4、解构三个重要的Pipeline(SD-Inpainting, ControlNet, AnimateDiff) [代码级手把手解析diffusers库]

上一篇我们解析了所有Pipeline的基类DiffusionPipeline。后续各种各样的pipeline都继承了DiffusionPipeline的模型加载保存等功能,然后再配合各个组件实现各种的结构即可。 事实上,一个Pipeline通常包含了如下模块(from_pretrained函数根据model_index.json文件new了一个Pipe…

Windows系统安装Flink及实现MySQL之间数据同步

Apache Flink是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算。Flink的设计目标是在所有常见的集群环境中运行&#xff0c;并以内存执行速度和任意规模来执行计算。它支持高吞吐、低延迟、高性能的流处理&#xff0c;并且是一个面向流处理和批处理…

基于JavaWeb的网上订餐项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88825723?spm1001.2014.3001.5503 Java项目-16 浏览商品&#xff0c;会员登录&#xff0c;添加购物车&#xff0c;进行配送等功能 文件代码功能介绍 1.Src下的java文件存放的我们后端的…

第三章 搜索与图论(三)(最小生成树,二分图)

一、最小生成树算法 稠密图使用prim算法&#xff0c;稀疏图使用kruskal算法 二、prim算法求最小生成树 prim和dijkstra算法类似&#xff0c;都是找到符合某种条件的点&#xff0c;然后更新。prim使用到已经构成的部分最小树所有结点中最小的距离。dijkstra算法是使用到起点最…

43.1k star, 免费开源的 markdown 编辑器

简介 项目名&#xff1a; MarkText-- 简单而优雅的开源 Markdown 编辑器 Github 开源地址&#xff1a; https://github.com/marktext/marktext 官网&#xff1a; https://www.marktext.cc/ 支持平台&#xff1a; Linux, macOS 以及 Windows。 操作界面&#xff1a; 在操作界…

七、滚动条操作——调整图像对比度

对比度调整&#xff1a;是在原来图像基础上进行相应的公式调整&#xff0c;是类似乘法操作&#xff0c;本身像数值越大&#xff0c;对比度增加之后其与低像素点值差距越大&#xff0c;导致对比增强 项目最终效果&#xff1a;通过滚动条trackbar来实现调整图片亮度的功能 我这里…

小游戏和GUI编程(5) | SVG图像格式简介

小游戏和GUI编程(5) | SVG图像格式简介 0. 问题 Q1: SVG 是什么的缩写&#xff1f;Q2: SVG 是一种图像格式吗&#xff1f;Q3: SVG 相对于其他图像格式的优点和缺点是什么&#xff1f;Q4: 哪些工具可以查看 SVG 图像&#xff1f;Q5: SVG 图像格式的规范是怎样的&#xff1f;Q6…

基于JSP的网上购书系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88825694?spm1001.2014.3001.5503 Java项目-15 源码论文数据库配置文件 基于JSP的网上购书系统 摘要 在当今的社会中&#xff0c; 随着社会经济的快速发展以及计算机网络技术和通讯技术…

css2复合选择器

一.后代&#xff08;包含&#xff09;选择器&#xff08;一样的标签可以用class命名以分别&#xff09; 空格表示 全部后代 应用 二.子类选择器 >表示 只要子不要孙 应用 三.并集选择器 &#xff0c;表示 代表和 一般竖着写 应用 四.伪类选择器&#xff08;包括伪链接…

python WEB接口自动化测试之requests库详解

由于web接口自动化测试需要用到python的第三方库--requests库&#xff0c;运用requests库可以模拟发送http请求&#xff0c;再结合unittest测试框架&#xff0c;就能完成web接口自动化测试。 所以笔者今天先来总结一下requests库的用法。希望对大家&#xff08;尤其是新手&…

[C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改

问题描述 WPF中DataGrid的选中行或选中者单元格&#xff0c;在焦点失去后&#xff0c;颜色会很淡&#xff0c;很不明显&#xff0c;不容易区分。 解决方法 在失去焦点的情况下&#xff0c;如何设置行或单元格与选中的时候颜色一样&#xff1f; <DataGrid.Resources>&…

Postgresql 的编译安装与包管理安装, 全发行版 Linux 通用

博客原文 文章目录 实验环境信息编译安装获取安装包环境依赖编译安装安装 contrib 下工具代码 创建用户创建数据目录设置开机自启动启动数据库常用运维操作 apt 安装更新源安装 postgresql开机自启修改配置修改密码 实验环境信息 Ubuntu 20.04Postgre 16.1 编译安装 获取安装…

BUUCTF LKWA

1.访问页面。 2.选择 Variables variable 关卡 3.获得flag http://357dab81-78b8-4d74-976a-4a69dd894542.node5.buuoj.cn:81/variables/variable.php?funcpassthru&inputcat%2Fflagflag{0020ced6-8166-4fa5-87a7-7d93ee687c3e}

【Linux笔记】动静态库的封装和加载

一、静态库的封装 我们在学习C语言阶段其实就已经知道一个可执行程序的形成过程分为预处理、编译、汇编、链接这四个阶段&#xff0c;而且也知道我们程序中使用的各种库其实是在链接的阶段加载的。 可我们那时候并不知道库是怎么被加载的&#xff0c;或者库是怎么形成的&…

结构体的大小以及内存对齐问题

结构体的大小怎么计算&#xff1f;什么是结构体的对齐&#xff1f; 首先想要直到结构体的大小需要先了解结构体的内存对齐。那么&#xff0c;什么是结构体的内存对齐&#xff1a; 什么是结构体内存对齐 结构体的对齐 就是 结构体类型数据在内存中按照一定的对齐规律储存。结…