官方题解 | 欢乐赛#75题解
2026-06-17 16:59:52
发布于:浙江
官方题解 | 欢乐赛#75题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
| 题目编号 | 题目名称 | 题目难度 |
|---|---|---|
| T1 | 皓仔卖蜂蜜 | 入门 |
| T2 | 皓仔加油 | 入门 |
| T3 | 皓仔找不同 | 入门 |
| T4 | 皓仔的十六进制矩阵 | 入门 |
| T5 | 皓仔的回响数 | 普及- |
| T6 | 皓仔的字符串修剪 | 普及- |
T1 皓仔卖蜂蜜
题目大意
已知每个礼盒需要放入 瓶蜂蜜。现在皓仔一共有 瓶蜂蜜,他会尽可能多地把蜂蜜装成完整的礼盒。
请你帮皓仔计算:装完所有能装成礼盒的蜂蜜后,还会剩下几瓶蜂蜜。
题解思路
瓶蜂蜜, 每个礼盒需要装 瓶, 问最后剩下几瓶, 这个问题也就是问数字 除以 之后的余数是多少, 因此答案直接输出 即可。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, a;
cin >> n >> a;
cout << n % a;
}
T2 皓仔加油
题目大意
已知皓仔身上一共有 元钱,当前油价为每升 元,汽车油箱最多可以装 升油。
皓仔想尽可能多地加油,但是加油量不能超过油箱容积。
请你计算皓仔最多可以加多少升油。
题解思路
假如将身上所有的钱都拿去买汽油, 则可以买到 升汽油, 但是需要注意油箱最多只能装 升油,因此最多可以加的油量需要在二者中取一个较小值。
也就是当 时候, 输出 ,否则输出 。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
double x, p, v;
cin >> x >> p >> v;
double ans = x / p;
if(v < ans) ans = v;
printf("%.2f", ans);
}
T3 皓仔找不同
题目大意
给定一个长度为 的数组。
这个数组中,有且只有一个数字和其他所有数字不同,其余 个数字都是相同的。
现在请你找出这个特殊数字所在的位置,输出它的下标。
数组下标从 开始。
题解思路
给定的数字在数组中固定只出现一次, 因此可以从前往后遍历数组, 对于每一个长度为 的相邻数字段, 看是否存在一个数字与另外两个数字不同。
变量 循环遍历从 开始到 结束,每次遍历相邻的 个数字 , 只要其中某个数字和另外两个数都不相同,就是我们要找的答案, 输出对应下标即可。
参考代码
#include<bits/stdc++.h>
using namespace std;
int a[1010], n;
int main(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n - 2; i++) {
if(a[i] != a[i + 1] && a[i] != a[i + 2]) {
cout << i; return 0;
}
if(a[i + 1] != a[i] && a[i + 1] != a[i + 2]) {
cout << i + 1; return 0;
}
if(a[i + 2] != a[i] && a[i + 2] != a[i + 1]) {
cout << i + 2; return 0;
}
}
}
T4 皓仔的十六进制矩阵
题目大意
给定 行 列的表格,每个位置上都是一个十六进制字符。
十六进制字符包括:
0到9A到F
其中,字符 0 到 9 分别表示数值 到 ,字符 A 到 F 分别表示数值 到 。
现在请你计算两个十进制结果:
- 所有行的总和中,最大的那一个行和;
- 所有列的总和中,最大的那一个列和。
题解思路
本题中可以不用专门开二维数组记录完整的表格, 只需要开两个数组 row[], col[] 用以记录每一行每一列的总和。
例如 row[i] 表示第 行的总和, col[j] 表示第 列的总和。
两重循环遍历表格的每一个位置 ,输入对应的十六进制字符 并且转化成对应的数值:
- 当 为数字字符时, 对应的数值 为
x - '0'; - 当 为大写字母时候, 对应的数值位
x - 'A' + 10;
然后将该数值累加到所在行和所在列的数组中,也就是 row[i] += c, col[j] += c;
最后完整遍历所有行和所有列, 求出最大的行总和,以及最大的列总和即可。
参考代码
#include<iostream>
using namespace std;
int row[110], col[110];
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
char x;
cin >> x;
int c;
if(x >= '0' && x <= '9') c = x - '0';
else c = x - 'A' + 10;
row[i] += c;
col[j] += c;
}
}
int rmax = 0, cmax = 0;
for(int i = 1; i <= n; i++) {
rmax = max(rmax, row[i]);
cmax = max(cmax, col[i]);
}
cout << rmax << endl << cmax << endl;
}
T5 皓仔的回响数
题目大意
如果一个正整数的十进制表示可以写成 ababab... 的形式,也就是由同一个两位数字片段不断重复组成,且两个数字不同,那么皓仔就称它为“回响数”。
例如:
1212是回响数,因为它可以看成12重复了 次;343434是回响数,因为它可以看成34重复了 次;9090是回响数,因为它可以看成90重复了 次;1234不是回响数。
特别地,回响数的位数必须是偶数,并且至少有 位。也就是说,像 12 这样的两位数不算回响数。
现在给定两个整数 ,请你统计区间 中一共有多少个回响数。
题解思路
注意到数据范围中 , 也就是说虽然值域非常大, 但是所有需要我们判断的数字数量只有 个。
因此可以枚举 到 范围内的所有数字, 进行数位分解, 判定是否是回响数, 是的话答案加一。 最后输出回响数个数就好。
本题的另一种解法是枚举所有的 ab的可能,并且进行重复拼接得到所有的回响数,可以得到总的回响数个数是较少的。枚举所有的回响数看是否在 区间内即可。
参考代码
#include<bits/stdc++.h>
using namespace std;
int a[30]; //存放数位拆分的结果
bool check(long long x) {
int idx = 0;
while(x) {
a[++idx] = x % 10;
x /= 10; // 数位分解
}
if(idx % 2 == 1 || idx < 4 || a[1] == a[2]) return false;
// 回响数长度需要是大于等于4的偶数, 并且ab两个数字需要不相等
for(int i = 3; i <= idx; i++) {
if(a[i] != a[i - 2]) return false; // 判定是否是 ab不断重复构成的
}
return true;
}
int main(){
long long l, r, cnt = 0;
cin >> l >> r;
for(long long i = l; i <= r; i++) {
if(check(i)) cnt++;
}
cout << cnt;
}
T6 皓仔的字符串修剪
题目大意
皓仔拿到了两个字符串 和 。
他可以对每个字符串进行若干次删除操作,每次只能删除当前字符串最左端或最右端的一个字符。
也就是说,经过若干次操作后,字符串中剩下的部分一定是原字符串中的一个连续子串。
皓仔希望通过删除操作,使得两个字符串最后剩下的内容完全相同。请你求出最少需要删除多少个字符。
如果两个字符串没有任何公共字符,也可以把两个字符串都删空,此时剩下的内容都为空串,也是剩下内容完全相同的情况。
题解思路
本题问最少删除多少个字符可以使得剩余的子串相等, 因此问题可以转化成两个字符串 的最长公共子串有多长。
因此可以枚举 的所有子串, 并且在 中寻找该子串是否出现过, 出现过的话则该子串可以认为是两者的公共子串。
获取 的子串这一操作可以直接使用成员函数 substr 获取, 在 中查找子串是否出现过可以直接使用成员函数 find来获取。
参考代码
#include<iostream>
using namespace std;
void solve() {
string s, t;
cin >> s >> t;
int ma = 0; //存共同子串长度的最大值
for(int i = 1; i <= s.size(); i++) { //枚举长度
for(int j = 0; j + i - 1 < s.size(); j++) { //枚举起点
string ss = s.substr(j, i); //子串为ss
if(t.find(ss) != -1) {
ma = max(ma, i);
}
}
}
cout << s.size() + t.size() - 2 * ma << endl;
}
int main() {
int t;
cin >> t;
while(t--) {
solve();
}
}
全部评论 5
1
4天前 来自 浙江
51
4天前 来自 浙江
3你不是非洲山沟里的拉拉吗
4天前 来自 浙江
41
2天前 来自 广东
1
七
2天前 来自 浙江
3六
2天前 来自 广东
2五
2天前 来自 广东
2
.
2天前 来自 浙江
01
2天前 来自 浙江
01
2天前 来自 广东
0




























有帮助,赞一个