官方题解 | 欢乐赛#61 题解
2025-11-24 17:08:19
发布于:浙江
官方题解 | 欢乐赛#61 题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
| 题目编号 | 题目名称 | 题目难度 |
|---|---|---|
| T1 | 小明打酱油 | 入门 |
| T2 | 小明的冬装 | 入门 |
| T3 | 地标建筑 | 入门 |
| T4 | 小明的循环字符串 | 入门 |
| T5 | 小明的群山环线 | 普及- |
| T6 | 小明的数字选取 | 普及- |
T1 小明打酱油
题目大意
有 个空的瓶子,一个瓶子可以装下 毫升的酱油, 现在酱油铺剩下的酱油一共只有 毫升酱油了, 问最多可以装满几个空瓶子带回家?
题解思路
最多可以买的酱油瓶数为 瓶,但是瓶子只有 瓶, 因此答案不能超过 ,答案为 $min(n, b / a) $ 。
参考代码
#include <iostream>
using namespace std;
int main() {
int n, a, b;
cin >> n >> a >> b;
cout << min(n, b / a) << endl;
return 0;
}
T2 小明的冬装
题目大意
需要衣物提供的温暖度累计大于等于 点。现在小明可以购买的冬装包含大衣,围巾, 手套, 可以提供的温暖度为 。在满足温暖度的前提下,输出需要的衣物内容。
题解思路
分支结构习题,依据题意逐个进行判断,在温暖值足够的时候输出对应的语句
参考代码
#include <iostream>
using namespace std;
int main() {
int n, a, b, c;
cin >> n >> a >> b >> c;
if(a >= n) cout << "Coat" << endl;
else if(a + b >= n) cout << "Coat ans scarf" << endl;
else if(a + b + c >= n) cout << "All" << endl;
else cout << "Too Cold" << endl;
return 0;
}
T3 地标建筑
题目大意
小明得到了当地 座大厦的高度数据。地标建筑的定义为,高度大于等于其他所有建筑高度的平均数的 倍, 请你按照输入的顺序把所有的地标建筑的高度全都输出。
题解思路
数据范围较小,可以直接枚举每一个建筑,然后循环遍历求解其他建筑高度的总和,从而得到其他建筑的平均高度 , 判断是否是地标建筑。
参考代码
#include <iostream>
using namespace std;
int a[1010], n;
int main() {
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
bool flag = false;
for(int i = 1; i <= n; i++) {
int sum = 0;
for(int j = 1; j <= n; j++) {
if(i == j) continue;
sum += a[j];
}
if(a[i] * (n - 1) >= sum * 2) {
cout << a[i] << ' ';
flag =true;
}
}
if(!flag) cout << -1 << endl;
return 0;
}
T4 小明的循环字符串
题目大意
一个长度为 的字符串, 由小写字母,还有星号 * 构成, 对于每一个星号,小明可以自己选择一个小写字母来替换,请问在经过恰当的替换之后, 该字符串能够恰好是由若干个长度为 的循环节拼接构成的吗?
题解思路
判定是否是循环字符串,需要满足以下两个条件:
- 字符串长度恰好是 的倍数。
- 循环节同一位置出现的字符不能超过 种。
因此可以直接枚举循环节的每一个位置,统计记录一下字符出现的种类数量(星号不计入在内),如果不只一种的话则不是循环字符串。
参考代码
#include <bits/stdc++.h>
using namespace std;
int cnt[26];
void solve() {
string s;
int k;
cin >> s >> k;
if(s.size() % k) {
cout << "NO\n";
return;
}
for(int i = 0; i < k; i++) {
for(int j = 0; j < 26; j++) cnt[j] = 0;
for(int j = i; j < s.size(); j += k) {
if(s[j] == '*') continue;
cnt[s[j] - 'a'] = 1;
}
int num = 0;
for(int j = 0; j < 26; j++) num += cnt[j];
if(num > 1) {
cout << "NO\n";
return;
}
}
cout << "YES\n";
}
int main() {
int t;
cin >> t;
while(t--) {
solve();
}
}
T5 小明的群山环线
题目大意
每一座山峰的顶上都有一个指向木牌,小明现在正在第 座山峰上, 接下来他会进行 次徒步, 每次行动都会根据当前山顶上到数字进行徒步, 请问 次徒步后,小明最后会停留在哪一座山峰上。
题解思路
一道模拟的习题,我们需要编程模拟小明的每一次行动,根据当前所在山峰的位置来进行徒步;
当前脚下山峰为 的情况下, 则下一次要去的山峰就是 , 由于是环形排列的山峰, 因此记得将 对 取余数。
参考代码
#include <bits/stdc++.h>
using namespace std;
int a[2000010], n, s, m;
int main() {
cin >> n >> s >> m;
for(int i= 1; i<= n; i++) cin >> a[i];
while(m--) {
s = s + a[s];
s = (s % n + n) % n;
if(s == 0) s = n;
}
cout << s << endl;
}
T6 小明的数字选取
题目大意
给定一个长度为 的 数组,小明可以自由的在里面选出任意个数字。
但是小明希望选出的数字存在一定的共性,换句话说,他希望选出的所有的数字的最大公因数不为 。请问小明最多可以选择几个数字。
题解思路
我们可以枚举一下选出的元素最终可以得到的最大公因数 ,那么所有选择的数字都会是 的倍数。
本题中数字的值域是 , 因此可以直接从 到 枚举公因数 , 然后判定最多能选择多少数字。
参考代码
#include <iostream>
#include<map>
using namespace std;
int n, m;
int a[100010];
int main() {
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
int ans = 1;
for(int i = 2; i <= 1000; i++) {
int cnt = 0;
for(int j = 1; j <= n; j++) if(a[j] % i == 0) cnt++;
ans = max(ans, cnt);
}
cout << ans << endl;
}
全部评论 1
为什么我第一题编的和这个题解差不多,就多了点无关紧要的内容,在 在线IDE能成功运行,答题界面为什么会报错?
#include <bits/stdc++.h> using namespace std ; int main () { int n , a , b; cin >> n >> a >> b ; int x = b / a ; int y = min ( n , x ) ; cout << y << endl ; return 0 ; }2天前 来自 浙江
0你现在这个代码是正确的。
//赛时代码 #include <bits/stdc++.h> using namespace std ; int main () { int a , b , c ; cin >> a >> b >> c ;//a是酱油瓶,b是一个瓶子容量,c是酱油数 double x = c / b ; cout << a - ceil(x) ; return 0 ; }赛时你的代码错是因为整数和整数计算会得到整数的结果,此时小数部分已经被舍去了,即使赋值给浮点型变量,里面的值也是小数部分全 的结果。
其次这里不足整瓶的酱油不计入,应该使用向下取整的
floor()函数。//参考代码 #include <bits/stdc++.h> using namespace std ; int main () { int a , b , c ; cin >> a >> b >> c ;//a是酱油瓶,b是一个瓶子容量,c是酱油数 double x = 1.0 * c / b ; cout<<min(a,(int)floor(x))<<endl; return 0 ; }由于
min()函数需要比较的内容类型一致,但floor()函数得到的结果是浮点数类型,这里需要强制类型转换对齐类型,否则运行会报错。21小时前 来自 浙江
0可是我在题目做却直接AC了,这又是为什么



15小时前 来自 浙江
0现在这个代码是正确的,因为整型变量直接舍去小数部分,正好符合题目的要求,而且整型变量就可以直接与 用
min得到较小值了。你比赛时那个代码是错误的,我上面贴了你赛时的代码,你可以再看看。
你说与题解差不多的代码,并没有找到你的错误提交记录。
4小时前 来自 浙江
0

















有帮助,赞一个