2020年7月藍橋杯初賽 C++B組(學習筆記3)

曉夢林發表於2020-10-31

C題:合併檢測

問題描述:

A 國準備給大量民眾進病毒核酸檢測。然而,用於檢測的試劑盒緊缺。
為了解決這一困難,科學家想了一個辦法:
合併檢測。即將從多個人(k個)採集的標本放到同一個試劑盒中進行檢測。如果結果為陰性,則說明這 k
個人都是陰性,用一個試劑盒完成了 k 個人的檢測。
如果結果為陽性,則說明至少有一個人為陽性,需要將這 k 個人的樣本全部重新獨立檢測(從理論上看,
如果檢測前 k-1 個人都是陰性可以推斷出第 k 個人是陽性,但是在實際操作中
不會利用此推斷,而是將 k 個人獨立檢測),加上最開始的合併檢測,一共使用
了 k + 1 個試劑盒完成了 k 個人的檢測。
A 國估計被測的民眾的感染率大概是 1%,呈均勻分佈。請問 k 取多少能
最節省試劑盒?

思路:

設檢測人數為n、k個人放到一個試劑盒檢測、感染率為p
第一種:都沒病,n/k,向上取整,n/k+1。由題意得知n很大,1可以省略,為n/k
第二種;感染的人恰好在n/k個試劑盒裡的其中一個,這k個人差不多都是感染人,要多檢測 np 次。
第三種情況:感染的人被平均分配,到n/k個試劑盒裡,要(n/k)* p * k * k 次,即多檢測 npk 次。
三種情況加起來,
sum=n/k+np+npk;

對k求導:
sum ’ = -n/k^2+0+np;

-n/k^2+0+np>=0 才能取到最小值
解得:
k^2>=100

答:k最少取10.

未完待續……

相關文章