第十一届蓝桥杯 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 k1 个人都是阴性可以推断出第 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 k100 时,每个人都要重新做一遍检测,答案必不优。


数理分析


  感染人数呈均匀分布,即 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=1k(Cki(1001)i(10099)ki),也就说,当 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)=x2NNln

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值