洛谷 P11045 [蓝桥杯 2024 省 Java B] 最优分组

devtools/2024/10/11 8:56:47/

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription]

在这里插入图片描述

[Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis]

首先得注意这么一点: k k k 必须得是 n n n 的因数(这里的 n , k n,k n,k 对应于题目的 N , K N,K N,K),不然不合法。

其实这虽然是限制,但是这个限制其实是使得题目的难度大大降低了。因为这样每组的宠物数量相同,有完全相同的规律,不需要特殊讨论。

每组 k k k 只宠物,一共需要分成 c = n k c=\dfrac{n}{k} c=kn 组。

对于每组宠物,假设被感染的宠物数量为 x x x。调动我们残存的高中知识,我们惊喜地发现, x x x 服从二项分布。于是我们知道 E ( x ) = k p E(x)=kp E(x)=kp

但是这并没有什么用。我们需要知道的是有宠物感染病毒的概率。正难则反,没有宠物感染病毒的概率是 p k p^{k} pk,所以有宠物感染病毒的概率就是 ( 1 − p k ) \left ( 1 - p^{k} \right ) (1pk)

一旦有动物感染,就需要重新进行 k k k 次测试。于是每一组测试次数的期望值是 k + k × ( 1 − p k ) k+k \times \left (1 - p^{k} \right ) k+k×(1pk)

一共有 c c c 组,由期望的线性可加性知,总的期望即为 n × [ k + k × ( 1 − p k ) ] n \times \left [ k + k \times \left ( 1 - p^{k} \right ) \right ] n×[k+k×(1pk)],化简即为 n k + n × ( 1 − p k ) nk+n \times \left ( 1 - p^{k} \right ) nk+n×(1pk)

一个快速幂,加上枚举即可。总时间复杂度 O ( n log ⁡ n ) O(n \log n) O(nlogn)。不过这个时间复杂度好像有点问题?反正就是线性对数就对了。

另外:不要忘记特判 k = 1 k=1 k=1 的情况。 k = 1 k=1 k=1 时的检测次数就是 n n n!!!

Code \color{blue}{\text{Code}} Code

int n,ans;double p,minn;double ksm(double u,int v){快速幂自己写,太简单啦
}double f(int k){return n/k+n*(1-ksm(1-p,k));
}int main(){cin>>n>>p;minn=n;ans=1;//特判 k=1for(int i=2;i<=n;i++)if (n%i==0){double tmp=f(i);if (tmp<minn){minn=tmp;ans=i;}}printf("%d",ans);return 0;
}

http://www.ppmy.cn/devtools/124088.html

相关文章

MATLAB图像去雾系统

课题介绍 雾霾&#xff0c;它会使大气的能见度降低&#xff0c;景物图像发生退化&#xff0c;在雾霾下拍摄的图像内容模糊&#xff0c;对比度下降&#xff0c;这将会严重影响人们的行车系统&#xff0c;卫星系统&#xff0c;导航系统等。目前&#xff0c;拍摄器材成本还是比较…

Elasticsearch Suggester

Elasticsearch里设计了4 种类别的 Suggester Term Suggester&#xff1a;词条建议器。对给输入的文本进进行分词&#xff0c;为每个分词提供词项建议。Phrase Suggester&#xff1a;短语建议器&#xff0c;在term的基础上&#xff0c;会考量多个term之间的关系Completion Sugg…

Selenium WebDriver和Chrome对照表

PS&#xff1a;我的没下载WebDriver 也没配置环境变量 也能用Selenium 网上有说把WebDriver放到chrome的安装目录并将路径配到path中【可能之前用playwright下载过】 查看浏览器版本号 在浏览器的地址栏&#xff0c;输入chrome://version/&#xff0c;回车后即可查看到对应版…

Pikachu- Over Permission-垂直越权

以admin 账号登陆&#xff0c;添加一个用户&#xff1b; 把添加用户的这个请求发送到 repeater&#xff1b; 退出admin&#xff0c;使用普通用户pikachu登陆&#xff1b; 只有查看权限&#xff1b; 使用pikachu 用户的认证信息&#xff0c;替换repeater处管理员创建用户请求的…

【黑马点评】 使用RabbitMQ实现消息队列——1.Docker与RabbitMQ环境安装

黑马点评中&#xff0c;使用基于Redis的Stream实现消息队列&#xff0c;但是Strema已经不太常用。在此修改为使用RabbitMQ实现消息队列。主要包括RabbitMQ的环境准备&#xff08;Docker的下载与安装&#xff09;以及如何修改黑马点评中的代码。 【黑马点评】使用RabbitMQ实现消…

jmeter学习(4)提取器

同线程组https://blog.csdn.net/vikeyyyy/article/details/80437530 不同线程组 在JMeter中&#xff0c;正则表达式提取的参数可以跨线程组使用。 通过使用Beanshell后置处理器和属性设置函数&#xff0c;可以将提取的参数设置为全局变量&#xff0c;从而在多个线程组之间共享…

解锁 Python 嵌套字典的奥秘:高效操作与实战应用指南

文章目录 前言&#x1f340;一、 什么是 Python 字典&#xff1f;1.1 字典的语法 &#x1f340;二、 字典的基本操作2.1 字典的创建2.2 访问字典中的值2.3 添加或修改键值对2.4 删除字典中的键值对 &#x1f340;三、 字典的遍历操作3.1 遍历字典的键3.2 遍历字典的值3.3 同时遍…

Vue 脚手架学习

1.使用 Vue 脚手架 1.1 初始化脚手架 1.1.1 具体步骤 第一步&#xff08;仅第一次执行&#xff09;&#xff1a;全局安装vue/cli。 npm install -g vue/cli 第二步&#xff1a;切换到你要创建项目的目录&#xff0c;然后使用命令创建项目 vue create xxxx 第三步&#xff1a;启…