官方题解 | 欢乐赛#52 题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 修改数字 入门 T2 小明的非递减数组 入门 T3 小明和视疲劳 入门 T4 卡牌 入门 T5 小明和九宫格 入门 T6 进制转换 普及-
T1 修改数字
题目大意
对于给定的三个数字 a,b,ca, b, ca,b,c,问是否能够通过最多一次操作使其变成 1,2,31, 2, 31,2,3。
题解思路
记录下三个数字 a,b,ca, b, ca,b,c 和 1,2,31, 2, 31,2,3 有几处不同,不同的数字数量小于等于 111即可
参考代码
T2 小明的非递减数组
题目大意
对于给定的数组, 每次操作可以使得其中一个数字+1+1+1 ,问最少几次操作可以使得数组成为一个非递减数组?
题解思路
从第 222 项开始遍历到第 nnn 项, 如果 a[i]<a[i−1]a[i] < a[i - 1]a[i]<a[i−1] , 则进行 a[i−1]−a[i]a[i - 1] - a[i]a[i−1]−a[i] 次加一的操作使得 a[i]==a[i−1]a[i] == a[i - 1]a[i]==a[i−1] ,最终统计操作的总次数(记得开long long)
参考代码
T3 小明和视疲劳
题目大意
对于两个给定的字符串 aaa 和 bbb ,问在不区分大小写的情况下二者是否相同?
题解思路
可以将字符串 aaa 和 bbb 当中所有字母都转换成大写字母,然后直接比较二者是否相同即可。
输入中字符串存在空格,需要使用读取一整行字符串的读入方式。
参考代码
T4 卡牌
题目大意
存在 aaa 张数值是 111 的卡牌, bbb 张数值是 222 的卡牌, ccc 张数值是 333 的卡牌, ddd 张数值是 444 的卡牌。
现在小明可以从中选取 kkk 张卡牌, 请问这 kkk 张卡牌的数值总和的最大值是多少?
题解思路
贪心的来看,显然会优先选取卡牌价值为 444 的卡牌, 如果还能继续选取,则继续选择价值是 3,2,13, 2, 13,2,1 的卡牌。最终计算价值的总和。
参考代码
T5 小明和九宫格
题目大意
给定一个 n×nn \times nn×n 的二维数组 aaa,求其中是否存在一个 3×33 \times 33×3 的子矩阵和小明喜欢的九宫格相同,存在的话输出 YES, 否则输出 NO 。
题解思路
枚举 3×33 \times 33×3 的子矩阵的左上角, 即行编号从 1∼n−21 \sim n - 21∼n−2 , 列编号从1∼m−21 \sim m - 21∼m−2, 然后判断下以该点为左上角的 3×33 \times 33×3 的子矩阵和小明喜欢的九宫格是否相同, 只要存在一个相同的就可以输出YES , 如果遍历了整个二维数组 aaa 仍然没有找到相同子矩阵,则输出 NO。
参考代码
T6 进制转换
题目大意
将两个十进制 a,ba, ba,b 转换成 rrr 进制之后, 然后输出其中字典序较大的一个数字。
题解思路
为了方便直接比较字典序, 可以将进制转换的结果存在两个string字符串中。
使用短除法进行进制转换, 并且将每次得到的数字转化为字符之后拼接在对应的string后面,得到一个从最低位开始到最高位的 rrr 进制 string。 将string翻转之后就得到我们想要的数字,可以手动遍历将string进行翻转, 也可以直接使用reverse函数。 最后将得到的两个字符串比较字典序之后输出其中较大的字符串。
参考代码