官方题解 | 欢乐赛#66题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 皓仔的菱形 入门 T2 皓仔和水煮蛋 入门 T3 皓仔滑雪 入门 T4 皓仔的宝箱清点 入门 T5 皓仔的不降数 普及- T6 皓仔的水果筛选3 普及-
T1 皓仔的菱形
题目大意
输出 555 行字符串,构成一个菱形。
题解思路
直接使用 cout 进行输出即可, 每一行结束使用 endl 换行。
参考代码
T2 皓仔和水煮蛋
题目大意
分支结构练习题,水煮蛋的黄金时间是 666 分 303030 秒, 现在一颗蛋已经煮了 xxx 秒,按照题目的要求进行判断并且输出, 规则如下:
1、如果还未煮 666 分 303030 秒,则告诉皓仔还需要经过 yyy 秒才可以得到一颗标准的溏心蛋, 输出数字 yyy。
2、如果恰好煮了 666 分 303030 秒, 输出 perfect。
3、如果时间超出 666 分 303030 秒, 输出 overcooked。
题解思路
按照题目思路编写多分支代码,为了方便的判断当前的蛋煮的时间是不足,恰好或是时间超出, 可以将目标时间 666 分 303030 秒 转化成秒数 390390390 秒。 而后进行判定, 当时间不足 390390390 秒时, 输出剩余时间 390−x390 - x390−x 秒, 时间恰好时输出 perfect, 当时间超过 390390390 秒后, 输出 overcooked。
参考代码
T3 皓仔滑雪
题目大意
皓仔想要去山上滑雪,滑雪的线路要求是一个单调不升序列:沿途高度始终不上升(后一个高度不大于前一个高度)。
现在给定一段路线的高度序列,请你判断这段路线是否单调不升
题解思路
题目要求整个数组单调不升,也就是说对于所有的 ai(2≤i≤n)a_i(2 \le i \le n)ai (2≤i≤n), 都满足 a[i]≤a[i−1]a[i ] \le a[i -1 ]a[i]≤a[i−1], 因此可以遍历 222 到 nnn, 如果有数字 iii 不满足 a[i]≤a[i−1]a[i ] \le a[i -1 ]a[i]≤a[i−1], 可以直接输出 NO, 并且结束程序。 如果所有数字都符合要求则输出 YES。
参考代码
T4 皓仔的宝箱清点
题目大意
在一张 nnn 地图上,每个点都对应一个奖品价值, 并且还对应一个字符,当该点字符为 A 时, 可以获取该点的奖品价值。 问整个地图中所有可获取的奖品总价值是多少?
题解思路
定义两个二维数组分别输入,其中字符网格使用字符数组 aaa,价值网格使用整数数组 ppp。遍历整个二维矩阵中的所有点(i,j)(i, j)(i,j), 当 $a_{ij} == $ A 时,令答案加上该点的价值 vijv_{ij}vij , 最后输出总答案。
参考代码
T5 皓仔的不降数
题目大意
当一个数字从高位到低位数字单调不降的情况下,该数字为 不降数。
现在给定一个数字 nnn, 请问在 1∼n1 \sim n1∼n 范围内一共有多少个 不降数。
题解思路
从 111 到 nnn 枚举所有数字,并且判定该数字是否是不降数。对于一个数字的判定,需要进行数位分解将其各个数位拆分出来,而后进行判断是否是一个不降数。每当出现一个不降数,答案加一,最后输出总体的答案。
参考代码
T6 皓仔的水果筛选3
题目大意
给定一个 nnn 个苹果,可以选择一批最大重量和最小重量差值不超过 yyy 的苹果一起打包出售, 问最多一次可以出售多少个苹果。
题解思路
本题可以采用双指针来进行解题, 首先对数组进行排序(复杂度 O(nlogn)O(nlogn)O(nlogn)),排序之后苹果的重量单调不降。 可以设定 iii 指针指向当前最小的苹果的重量, 在 aj−aia_j - a_iaj −ai 不超过 yyy 的情况下,使用最大的 jjj, 指向当前选择的最大的苹果的重量。 当 iii 变大向后移动的时候, jjj 也同样向后移动 , 每次可以选择的苹果数量为 j−i+1j - i + 1j−i+1,在所有答案里面选择最大值并且输出。
参考代码