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

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 ) (1−pk)。

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

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

一个快速幂,加上枚举即可。总时间复杂度 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

cpp 复制代码
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=1
	
	for(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;
}
相关推荐
码匠许师傅3 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
无名猿4 小时前
new/delete 与 malloc/free:为什么绝对不能混用
c++·内存管理·现代c++·踩坑记录
2601_962218616 小时前
C++中decltype关键字的实现
开发语言·c++
繁华的地方不一定留下你的脚印6 小时前
C++ std::variant 与 std::visit:安全保存多种类型,写清每个处理分支
开发语言·c++
程序员老陆7 小时前
WIN32_LEAN_AND_MEAN:Windows 头文件里的“精简编译开关”
c++·windows
hold?fish:palm7 小时前
45 二叉树的右视图
开发语言·c++·算法
ShineWinsu8 小时前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
布莱克6058 小时前
在C++中,构造函数能不能是虚函数?析构函数为什么要虚?
开发语言·c++·构造函数·析构函数·虚函数
旖旎夜光8 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
王老师青少年编程9 小时前
2026年9月GESP真题及题解(C++七级):必经之路
c++·题解·真题·gesp·七级·2026年9月·必经之路