非官方全题解|欢乐赛#55
2025-09-01 09:31:22
发布于:北京
😊感谢出题人你好带来的精彩比赛!
🎉 接下来,我将从第1题开始逐一解答,每道题包含题目描述、解题思路和代码实现。希望能帮助大家更好地理解题目!💡
第1题:奇数判断 🧮
题目描述
给定三个整数 a, b, c,计算表达式 a×b−c,判断结果是否为奇数。如果是,输出 "Yes",否则输出 "No"。
解题思路
直接计算 a*b-c,然后检查结果的奇偶性。使用模2运算,如果结果为1则是奇数,否则是偶数。非常简单哦!😊
代码实现
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int result = a * b - c;
if (result % 2 == 1) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
第2题:小明和神秘宝箱 🎁
题目描述
有 n 个宝箱,每个宝箱的金币范围是 [l_i, r_i]。求总金币的最小值和最大值。
解题思路
最小总金币是每个宝箱下限 l_i 的和,最大总金币是每个宝箱上限 r_i 的和。直接遍历求和即可!💰
代码实现
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long min_sum = 0, max_sum = 0;
for (int i = 0; i < n; i++) {
long long l, r;
cin >> l >> r;
min_sum += l;
max_sum += r;
}
cout << min_sum << " " << max_sum << endl;
return 0;
}
第3题:找出卧底 🕵️
题目描述
给定 n 个字符串,检查每个字符串在忽略大小写的情况下是否等于 "WOHEYEZHI",统计匹配的数量。
解题思路
将每个字符串转换为小写,然后与目标字符串 "woheyezhi" 比较。如果相等,计数加一。注意大小写忽略哦!🔍
代码实现
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
string target = "woheyezhi";
int count = 0;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
transform(s.begin(), s.end(), s.begin(), ::tolower);
if (s == target) {
count++;
}
}
cout << count << endl;
return 0;
}
第4题:寻找最小公倍数 🔍
题目描述
给定一个数组,找到所有数对中最小公倍数(LCM)的最大值。
解题思路
遍历所有数对,计算每对数的 LCM。计算 LCM 需要先计算最大公约数(GCD),使用欧几里得算法。然后 LCM = (a * b) / GCD。注意避免整数溢出,可以先除后乘。🔢
代码实现
#include <iostream>
#include <vector>
using namespace std;
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int max_lcm = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int g = gcd(a[i], a[j]);
int lcm = a[i] / g * a[j];
if (lcm > max_lcm) {
max_lcm = lcm;
}
}
}
cout << max_lcm << endl;
return 0;
}
第5题:对称矩阵 🔲
题目描述
判断一个 n×n 矩阵是否左右对称和上下对称。
解题思路
检查每一行是否左右对称:matrix[i][j] == matrix[i][n-1-j]。检查每一列是否上下对称:matrix[i][j] == matrix[n-1-i][j]。如果都满足,输出 "YES",否则输出 "NO"。✅
代码实现
#include <iostream>
#include <vector>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<vector<int>> matrix(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
bool valid = true;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n / 2; j++) {
if (matrix[i][j] != matrix[i][n - 1 - j]) {
valid = false;
break;
}
}
if (!valid) break;
}
if (!valid) {
cout << "NO" << endl;
continue;
}
for (int j = 0; j < n; j++) {
for (int i = 0; i < n / 2; i++) {
if (matrix[i][j] != matrix[n - 1 - i][j]) {
valid = false;
break;
}
}
if (!valid) break;
}
if (valid) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
第6题:宝石项链 💎
题目描述
计算宝石项链的美丽值。每种颜色的美丽值是颜色值乘以所有该颜色宝石编号的异或和。
解题思路
使用哈希表记录每种颜色的异或和。遍历每个宝石,将编号(索引+1)异或到对应颜色的值上。最后遍历哈希表,将颜色值乘以异或和累加。✨
代码实现
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
unordered_map<long long, long long> xorMap;
for (int i = 0; i < n; i++) {
long long c;
cin >> c;
long long id = i + 1;
xorMap[c] ^= id;
}
long long ans = 0;
for (auto& pair : xorMap) {
ans += pair.first * pair.second;
}
cout << ans << endl;
return 0;
}
以上就是本次欢乐赛#55的全部题解啦!大家明白了吗?
希望对你有所帮助~如果对任何题解有疑问,欢迎在评论区留言交流~!😄
💡 提示:每个解法都针对题目特点进行优化
🚀 代码均满足时间和空间复杂度要求
👍 原创题解不易,欢迎点赞支持!
PS:@AC君 写题解不容易,给个周边吧!求求了!🙏
这里空空如也
有帮助,赞一个