官方题解 | 欢乐赛#55 题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 奇数判断 入门 T2 小明和神秘宝箱 入门 T3 找出卧底 入门 T4 寻找最小公倍数 入门 T5 对称矩阵 入门 T6 宝石项链 普及-
T1 奇数判断
题目大意
对于给定的三个数字 a,b,ca, b, ca,b,c, 计算式子的结果并且判断是否为奇数?
题解思路
输入a,b,ca, b, ca,b,c, 计算一下 a×b−ca \times b - ca×b−c的结果并且判断是否为奇数。是的话输出Yes, 否则输出No。
参考代码
T2 小明和神秘宝箱
题目大意
小明获取了 nnn 个神秘宝箱第 iii 个宝箱可以得到的金币数最少是 lil_ili , 最大是 rir_iri 。
问开启了全部 nnn个宝箱后, 小明能够获得的最少金币数和最大金币数分别是多少?
题解思路
最少金币数为所有宝箱的最少金币 lil_ili 的总和, 最多金币数是所有宝箱的最多金币 rir_iri 的总和。
因此直接循环输入所有的li,ril_i, r_ili ,ri 并且计算总和即可。(本题数字值域较大,记得开 long longlong\ longlong long
参考代码
T3 找出卧底
题目大意
对于给定的 nnn 个字符串, 求其中有多少个字符串在不区分大小写的情况下和 "WOHEYEZHI" 相同,并且输出对应的个数。
题解思路
本题需要注意,不区分大小写, 因此可以对于输入的字符串的所有字符,全部都转化成大写字母来进行比较。每有字符串和 "WOHEYEZHI" 相同,答案+1。最后输出答案即可。
参考代码
T4 寻找最小公倍数
题目大意
给定一个长度为 nnn 的数组,对于数组中所有的数对 ai,aj(1≤i,j≤n)a_i, a_j (1 \le i, j \le n)ai ,aj (1≤i,j≤n), 求 aia_iai 和 aja_jaj 的最小公倍数的最大值。
题解思路
本题的数组长度和值域都很小(1≤n,ai≤500)(1 \le n, a_i \le 500)(1≤n,ai ≤500) ,因此可以写较为朴素暴力的三重循环。首先枚举所有的数对 (i,j)(i, j)(i,j), 然后再遍历寻找
gcd(a[i],a[j])gcd(a[i], a[j])gcd(a[i],a[j]), 则对应的最小公倍数为 a[i]∗a[j]/gcd(a[i],a[j])a[i] * a[j] / gcd(a[i], a[j])a[i]∗a[j]/gcd(a[i],a[j])。在所有的最小公倍数中找到最大值并且输出即可。
参考代码
T5 对称矩阵
题目大意
给定一个n×n(n为偶数)n \times n(n为偶数)n×n(n为偶数)的矩阵, 如果这个矩阵左右对称并且上下也对称,那我们称之为对称矩阵。请你判断该矩阵是否是对称矩阵。如果是对称矩阵,输出YES,否则输出NO.
题解思路
假设该矩阵是一个对称矩阵, 则对于 a[i][j]a[i][j]a[i][j] 来说,应当与左右对称的 a[i][n−j+1]a[i][n - j + 1]a[i][n−j+1]相同, 并且和上下对称的 a[n−i+1][j]a[n - i + 1][j]a[n−i+1][j] 相等。
因此遍历整个矩阵,如果每个点都和对应的对称点数值相等, 则该矩阵是一个对称矩阵。
参考代码
T6 宝石项链
题目大意
给定一个长度是 nnn 的数组, 对于其中每一种数值,求该数字出现的所有位置的编号的异或和。最终输出所有异或和的总和。
题解思路
为了将相同类型的数组聚集在一起, 可以使用结构体存储每一个数字以及对应的出现位置。
在按照数值进行结构体排序之后,则所有的相同数字就聚集在一个连续的区间了。 此时可以直接遍历结构体数组并且计算编号的异或和。最后累加所有的异或和得到答案。
(另外可以尝试使用map存储每种数字对应的异或和来快速解答。
参考代码