【问题描述】
某病毒最近在A国蔓延,为了尽快控制该病毒,A国准备给大量民众进行病毒核酸检测。然而,用于检测的试剂盒紧缺。为了解决这一困难,科学家想了一个办法: 合并检测,即将从多人(k个)处采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这k个人都是阴性,用一个试剂盒即可完成k个人的检测。如果结果为阳性,则说明其中至少有一个人为阳性,需要将这k个人的样本全部重新独立检测(从理论上看,如果检测前k-1个人都是阴性,则可以推断出第k个人是阳性,但是在实际操作中不会利用此推断,而是让k个人独立检测),加上最开始的合并检测,一共使用了k+1个试剂盒完成了k个人的检测。A国估计被测民众的感染率大概是1%,且呈均匀分布。请问k取值多少最节省试剂盒?
随便拿k = 1,2,3,4模拟最坏情况可以发现规律
- 100%k=0时
最坏要用100/k份,最后一份出现一个阳,重新对最后一份进行k次复查
m = 100/k+k
- 100%k!=0时
最坏要用100/k份,其中有k个人的那一份出现了阳又要重新测k次
m = 100/k+1+k
#include <iostream>
using namespace std;
int main()
{
int n = 100, ans = 1, m = 100;
for(int k=2; k<=n; k++){
if(100 % k == 0){
if(m > 100/k+k) ans = k, m = 100/k+k;
}
else{
if(m > 100/k+k+1) ans = k, m = 100/k+k+1;
}
}
cout<<ans<<endl;
return 0;
}