蓝桥杯 2020年省赛真题 (C/C++ 大学A组 )
打发时间。
#A 跑步训练
本题总分: 5 5 5 分
问题描述
小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000 10000 10000。如果小明跑步,每分钟损耗 600 600 600 的体力。如果小明休息,每分钟增加 300 300 300 的体力。体力的损耗和增加都是均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟 …… 如此循环。如果某个时刻小明的体力到达 0 0 0,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
3880
#include <stdio.h>
int N = 10000, k = 5, ans = 0, K[2]{
1, -1};
int main() {
for (int opt = 1; N > 0; opt ^= 1)
for (int i = 0; i < 60 && N > 0; i++)
N += K[opt] * (opt + 1) * k, ++ans;
if (N < 0) --ans;
printf("%d", ans);
}
简单的模拟题。
#B 合并检测
本题总分: 5 5 5 分
问题描述
新冠疫情由新冠病毒引起,最近在 A \mathrm A A 国蔓延,为了尽快控制疫情, A \mathrm A A 国准备给大量民众进病毒核酸检测。
然而,用于检测的试剂盒紧缺。
为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人( k k k 个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k k k 个人都是阴性,用一个试剂盒完成了 k k k 个人的检测。如果结果为阳性,则说明至少有一个人为阳性,需要将这 k k k 个人的样本全部重新独立检测(从理论上看,如果检测前 k − 1 k − 1 k−1 个人都是阴性可以推断出第 k k k 个人是阳性,但是在实际操作中不会利用此推断,而是将 k k k 个人独立检测),加上最开始的合并检测,一共使用了 k + 1 k + 1 k+1 个试剂盒完成了 k k k 个人的检测。
A \mathrm A A 国估计被测的民众的感染率大概是 1 1 1%,呈均匀分布。请问 k k k 取多少能最节省试剂盒?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
10
朴素解法
#include <stdio.h>
int N = 10000, ans = 100;
int calc(int k) {
return N / k + N / 100 * k; }
int main() {
for (int i = 1; i < 100; ++i)
if (calc(i) < calc(ans)) ans = i;
printf("%d", ans);
}
设 N N N 为民众人数,然后暴力枚举 [ 1 , 100 ) [1,100) [1,100) 这个区间就行,因为 k ≥ 100 k \geq 100 k≥100 时,每个人都要重新做一遍检测,答案必不优。
数理分析
感染人数呈均匀分布,即 p { θ = 某 民 感 染 } = 1 100 p\{\theta = 某民感染\} = \frac 1{100} p{ θ=某民感染}=1001、 p { θ = 某 民 健 康 } = 99 100 p\{\theta = 某民健康\} = \frac {99}{100} p{ θ=某民健康}=10099,
k k k 名群众中无有感染者,可以看作为 k k k 重伯努利试验,其中有感染者的概率为 ∑ i = 1 k ( C k i ( 1 100 ) i ( 99 100 ) k − i ) \displaystyle\sum_{i=1}^k\left(C_{k}^{i}(\frac 1{100})^i(\frac {99}{100})^{k-i}\right) i=1∑k(Cki(1001)i(10099)k−i),也就说,当 k k k 取定时,只有 ( 99 100 ) k (\frac{99}{100})^k (10099)k 的分组不用重新检测,所用的试剂盒个数为 N k + N ( 1 − ( 99 100 ) k ) \frac Nk + N(1-(\frac{99}{100})^k) kN+N(1−(10099)k)。
设函数 f ( x ) = N x + N ( 1 − ( 99 100 ) x ) f(x) = \frac Nx+N(1-(\frac{99}{100})^x) f(x)=xN+N(1−(10099)x), N N N 为一个较大常数, f ′ ( x ) = − N x 2 − N ln 99 100 ( 99 100 ) x = − N ( x − 2 + ln 99 100 ( 99 100 ) x ) f'(x) = -\frac N{x^2} - N\ln\frac{99}{100}(\frac{99}{100})^x = -N(x^{-2} + \ln\frac{99}{100}(\frac{99}{100})^x) f′(x)=−x2N−Nln