官方题解 | 欢乐赛#62 题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 皓仔的上课迟到 入门 T2 皓仔吃水果 入门 T3 皓仔的数字分割 入门 T4 皓仔的平行四边形计数 入门 T5 皓仔数星星 普及- T6 皓仔的BCD码 普及-
T1 皓仔的上课迟到
题目大意
皓仔和陈老师约定今天晚上 18:0018:0018:00 来上信奥课,不过由于皓仔路上堵车, 他在约定时间的 aaa 分钟后才进入课堂。问今晚皓仔和陈老师的课是什么时候开始的?
题解思路
aaa 分钟也就是 a/60a / 60a/60 小时加上 a%60a \% 60a%60 分钟,因此最终时针为 18+a/6018 + a / 6018+a/60, 分针为 a%60a \% 60a%60 (注意保留两位整数输出)
参考代码
T2 皓仔吃水果
题目大意
皓仔吃水果的要求是每一块水果的重量要在 aaa 克到 bbb 克之间 重量小于 aaa 克的水果块他不会吃, 重量大于 bbb 克的水果皓仔会吃掉 bbb 克。
现在一共有 nnn 块水果摆在皓仔眼前,他会逐一的按照自己的习惯尝试吃掉所有的水果,请问最后皓仔一共吃掉了几克水果?
题解思路
循环结构输入所有水果的重量 ,只有当水果的值超出 aaa 的情况下才会吃,但是吃下的数量不会超过 bbb 克, 因此最终摄入的重量为 min(ai,b)min(a_i, b)min(ai ,b)。 将每一个水果吃下的重量累加即可得到答案。
参考代码
T3 皓仔的数字分割
题目大意
给定一个很大的数字,而后将其按照 kkk 个一段进行分割,分别输出。
题解思路
由于数字太大,字符串输入数字,每 kkk 个字符输出一次,并且加上空格即可,最后一段的长度可能不是恰好 kkk 个,只需要将剩余的所有字符都输出即可。
参考代码
T4 皓仔的平行四边形计数
题目大意
给定 nnn 个数字, 请问在所有的四元组 i,j,k,t{i, j , k, t}i,j,k,t 里 (1≤i<j<k<t≤n)(1\le i < j < k < t \le n)(1≤i<j<k<t≤n), 一共有多少种选择可以拼出一个平行四边形。
题解思路
平行四边形需要有两对相等的边,也就是 a=b,c=da = b, c = da=b,c=d,因此可以四重循环枚举所有的四元组,为了方便进行平行四边形的判定,可以将四条边进行排序。排序之后判定较小的两条边 a,ba,ba,b 是否相等,较大的两条边 $c,d $是否相等即可。
参考代码
T5 皓仔数星星
题目大意
皓仔肉眼可见的星空是一片 5000×50005000 \times 50005000×5000 的网格, nnn 个星星点缀期间,每一颗星星的坐标是 (xi,yi)(x_i, y_i)(xi ,yi )。
望远镜一次可以观察并且记录下来的视野是一片宽度为 www, 高度为 hhh 的星空,皓仔快速地连续拍摄了 mmm 张照片, 每一张照片记录的星空区域是左上角为 (ai,bi)(a_i, b_i)(ai ,bi ) 的一片区域, 数一数有多少星星没有拍到.
题解思路
可以考虑直接使用二维数组记录每一个星星的位置,对于每一张照片,可以循环遍历枚举整个照片里的每一个位置,
参考代码
T6 皓仔的BCD码
题目大意
BCD码会将一个十进制数字的每一个数位都转化成444位的二进制数来表示。
例如数字 123123123, 可以转化成 000100100011000100100011000100100011。
其中数字111对应了二进制的 000100010001;
数字222对应了二进制的 001010010100101;
数字333对应了二进制的 001100110011;
题解思路
我们只需要将数字的每一位拆分出来,并且转化成一个 444 位的二进制编码。
数字很大,选择使用字符串输入该数字,而后可以选择进行进制转换,也可以直接写位运算提取其中较低的四位。
参考代码