官方题解 | 欢乐赛#68题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 皓仔的金字塔 入门 T2 皓仔的偏科判定 入门 T3 皓仔的回文徽章 入门 T4 皓仔的蛇形数据分析 入门 T5 皓仔的字母定位 普及- T6 皓仔的数位排序 普及-
T1 皓仔的金字塔
题目大意
按照输出样例, 输出一个 444 行的金字塔。
题解思路
输出四行,使用 endl 进行换行即可。
参考代码
T2 皓仔的偏科判定
题目大意
给定语文和数学两科的成绩,分别记为 ccc 与 mmm,取两科中的较高分 h=max(c,m)h=\max(c,m)h=max(c,m) 与较低分 l=min(c,m)l=\min(c,m)l=min(c,m),计算比例 R=hlR=\dfrac{h}{l}R=lh 。
现在给定阈值 ttt,当 R≥tR\ge tR≥t 时,认为皓仔偏科,输出 YES;否则输出 NO。
题解思路
根据题意,使用较大值除以较小值得到分数的比例 RRR,计算的公式为 1.0*max(c,m)/min(c,m),此处为了转化为小数除法因此将式子乘以 1.0 。而后使用分支结构,当 R≥tR\ge tR≥t 时,,输出 YES;否则输出 NO。
参考代码
T3 皓仔的回文徽章
题目大意
给定一个字符串,皓仔希望最终的字符串满足以下规则:
1. 左半部分的每个字符都必须是大写字母。
2. 右半部分的每个字符都必须是小写字母。
3. 将整串忽略大小写后,字符串是一个回文串。也就是说在忽略大小写的情况下,对任意 0≤i<n0 \le i< n0≤i<n,都有 Si=Sn−i−1S_i=S_{n-i-1}Si =Sn−i−1 。
皓仔可以进行若干次修改操作:每次可以把字符串中的某一个位置的字符改成任意一个英文字母(可以是大写或小写)。
问至少需要修改多少个字符,才能让字符串满足以上全部规则。
题解思路
题目给定的要求,是以回文的形态成对出现的,也就是对于 0≤i<n0 \le i< n0≤i<n,需要考虑 SiS_iSi 和 Sn−i−1S_{n-i-1}Sn−i−1 之间的关系。对于这一对字符,需要产生的修改操作次数可以这样计算:
1、 当左边的字符不是大写字母时,一定需要进行一次修改。
2、 当右边的字符不是小写字母时,一定需要进行一次修改。
3、如果左边字符本就是大写,且右边字符本就是小写的情况下,根据字母种类是否一致考虑是否需要进行一次修改。
遍历整个字符串,判定修改次数后输出。
参考代码
T4 皓仔的蛇形数据分析
题目大意
根据题目给出的遍历顺序对二维矩阵进行蛇形读取,把蛇形读取得到的长度为 n×mn\times mn×m 的序列记为 BBB。如果对任意 1≤i<n×m1\le i<n\times m1≤i<n×m 都满足 Bi<Bi+1B_i<B_{i+1}Bi <Bi+1 ,则称该表格“蛇形严格递增”。
现在给你多组测试数据,请你判断每组表格是否蛇形严格递增。若是输出 YES,否则输出 NO。
题解思路
二维数组练习题,可以考虑按照行号的奇偶性来决定遍历的顺序并且判断单调性,也可以提前把偶数行所有的数据进行反转,此处可以直接使用reverse函数进行翻转。
而后按顺序遍历所有数字, 使用变量 lastlastlast 记录上一次访问的数字,只要数字始终严格大于 lastlastlast 从而保持单调性则输出 YES,否则输出 NO。
参考代码
T5 皓仔的字母定位
题目大意
将一个十进制数 nnn 转换成 rrr 进制表示,问在转换后的表示中,所有字母(A∼ZA \sim ZA∼Z)出现的位置有哪些。
位置从右到左从 000 开始编号。请你把所有出现字母的位置收集起来,按从小到大输出。
* 如果没有任何字母出现,则输出 not found。
题解思路
进制转换模板题。
可以直接进行进制转换,使用一个变量 ansansans 来记录当前的位置编号,如果当前这一位是一个字母,也即是说当前这一位的数字是大于 999 的,那么可以直接输出当前的位置。
题目要求在没有出现字母的情况下输出 not found,因此可以使用一个变量 fff 用来判断是否输出过字母,如果没有输出过则输出 not found。
参考代码
T6 皓仔的数位排序
题目大意
本题需要对一个整数数组排序,排序规则如下:
1. 位数为奇数的数字放在左边;
2. 位数为偶数的数字放在右边;
3. 左边(位数为奇数)的数字按数值升序排列;
4. 右边(位数为偶数)的数字按数值降序排列。
请你输出按上述规则排序后的数组。
题解思路
本题中的排序规则较为复杂,可以考虑使用结构体排序来完成。
我们需要在结构体中记录每一个数据的数值以及位数,而后根据排序规则编写自定义的比较函数 cmp 。
cmp 函数比较时候的优先级如下:
第一优先级为位数的奇偶性;
第二优先级为奇偶性一致的情况下,奇数使用升序排序,偶数使用降序排序。
最后直接 sort 排序并且输出即可。
参考代码