官方题解 | 欢乐赛#67题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 皓仔的存钱罐 入门 T2 皓仔买水果 入门 T3 皓仔的车辆测试 入门 T4 皓仔的字母寻宝 入门 T5 皓仔的字母占比 普及- T6 皓仔的手工课 普及-
T1 皓仔的存钱罐
题目大意
将 nnn 个一元的硬币全都换成 100100100 元的纸币,问最多一共可以换几张呢?
题解思路
答案也就是 nnn 除以 100100100 向下取整直接将数字 nnn 对 100100100 进行整除即可得到答案。
参考代码
T2 皓仔买水果
题目大意
皓仔拿着 nnn 元去水果店买水果。 一个苹果 aaa 元钱, 一个梨子 bbb 元钱,一个桃子 ccc 元钱,他可以选择一种水果使用身上所有的钱进行购买,使得手上剩下的钱尽可能少,问皓仔手上剩余的最少钱数是多少?
题解思路
皓仔买水果能够剩下的钱就是 nnn 分别除以 aaa, bbb, ccc 得到的余数。因此我们只需要在 n%a,n%b,n%cn \% a, n \% b, n \% cn%a,n%b,n%c 中选取一个最小值并且输出即可。
参考代码
T3 皓仔的车辆测试
题目大意
在一段路面上按顺序布置了 nnn 个采样点,并记录了每个采样点的高度 h1,h2,…,hnh_1,h_2,\dots,h_nh1 ,h2 ,…,hn 。其中第 iii 段(从点 iii 到点 i+1i+1i+1)的颠簸量定义为:di=∣hi+1−hi∣d_i=\left|h_{i+1}-h_i\right|di =∣hi+1 −hi ∣ 。
整段路面的平均颠簸度定义为所有相邻段颠簸量的平均值。
计算这段路面的平均颠簸度,并按要求保留 222 位小数输出。
题解思路
循环结构直接遍历所有的点 i(1≤i<n)i (1 \le i < n)i(1≤i<n), 计算对应的颠簸度之后并且累加求和得到总颠簸度 sumsumsum, 那么平均颠簸度就是 sum/(n−1)sum / (n - 1)sum/(n−1)。注意使用 printf 进行保留两位小数输出。
参考代码
T4 皓仔的字母寻宝
题目大意
在一张 n×mn \times mn×m 的字符构成的地图上,可能出现一些大写字母 (A∼Z)(A \sim Z)(A∼Z),找出矩阵中所有大写字母的位置,并按要求输出。
题解思路
二维数组练习题,在输入一个二维数组 aaa 之后, 循环遍历所有的点,每当遇到一个大写字母 a[i][j] >= 'A' && a[i][j] <= 'Z'时, 记录该字母的出现位置,数据保证一个字母只会出现最多一次。
最后循环遍历字母 A∼ZA \sim ZA∼Z, 对于每个字母输出对应的位置,使用标记 fff 来代表是否有找到过字母,如果没有的话则输出 not found。
参考代码
T5 皓仔的字母占比
题目大意
将一个数字尝试转化成 2∼362 \sim 362∼36 进制,找出其中字母占比最高的进制数并且输出。
字母占比=表示中属于 A∼Z 的字符个数表示的总字符数\text{字母占比}=\frac{\text{表示中属于 }A\sim Z\text{ 的字符个数}}{\text{表示的总字符数}} 字母占比=表示的总字符数表示中属于 A∼Z 的字符个数
* 如果多个进制的字母占比相同,输出较小的进制。
* 进制表示不允许前导零;若 n=0n=0n=0,其表示为 "0"。
题解思路
从 222 到 363636 枚举所有可能的进制数,进行一次进制转换并且计算对应的字母占比,如果当前进制的字母占比已有的最大答案 maxnmaxnmaxn 更大,则更新进制数的答案 rrr。
参考代码
T6 皓仔的手工课
题目大意
现在有 nnn 根绳子,第 iii 根长度为 aia_iai 。皓仔可以把一根绳子剪成若干段,每段长度都必须是同一个正整数 LLL(单位与 aia_iai 相同),剪完后剩下不足 LLL 的部分会被丢弃。
皓仔希望最终能得到至少 kkk 段长度为 LLL 的小绳段,并且让 LLL 尽可能大。请你求出满足条件的最大 LLL。
如果无论 LLL 取多少都无法得到 kkk 段,则输出 000。
题解思路
本题数据范围较小, 绳子长度 aia_iai 最大为 100010001000,可以直接从 100010001000 到 111枚举所有可能的长度 LLL ,并且计算对应可以得到的小绳段数量 ai/La_i / Lai /L 并且累加,如果小绳段总数大于等于 kkk, 则该长度可以接受, 是可以得到的最大的 LLL。
参考代码