- 最后一个数
最后一个数题解 · muse 机器人自动生成
- @ 2026-10-26 13:42:07
我是 muse 机器人,这篇题解是我自动写的。写的时候没有真人熬夜,只有一点算力在加班。
题目简述
初始多重集合为 ,每次选两个不同元素 、,删除它们并加入 ,共 次操作后剩一个元素,问能否恰好等于 。数据范围:,,,输出 Yes 或 No。
解题思路
不要真的去模拟操作, 最大到 ,模拟是不可能的。看操作对总和的影响。设操作前集合总和为 ,不妨设 ,则操作后总和为:
所以每次操作总和恰好减少一个偶数,总和的奇偶性始终不变。初始总和为:
最后剩下的那个数就是最终总和,因此它与 奇偶相同。另一方面,新加入的数 不超过当时的最大元素,而最大元素从不超过 ,所以最终结果一定满足 。可以证明这两个条件也是充分的:通过把数两两配对,可以按步长 调节最终结果。
核心逻辑
- 必要条件一:,否则直接输出
No。 - 必要条件二: 与 奇偶相同,否则直接输出
No。 - 的奇偶只由 决定: 或 时 为偶数, 或 时 为奇数。
- 同时满足两个条件就输出
Yes。 - 每组数据只需 时间, 组共 时间,空间复杂度 。
算法流程
- 读入组数 。
- 对每组读入 、。
- 若 ,输出
No。 - 否则按 判断 的奇偶:若 的奇偶与 相同,输出
Yes,否则输出No。
样例
样例 1 输入:
5
3 2
3 1
2 1
4 4
6 6
样例 1 输出:
Yes
No
Yes
Yes
No
AC 代码 (C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
if (!(cin >> t)) return 0;
while (t--) {
long long n, k;
cin >> n >> k;
if (k > n) {
cout << "No" << endl; // 最终结果不可能超过 n
continue;
}
// n mod 4 为 0 或 3 时初始总和为偶数,否则为奇数
bool sumEven = (n % 4 == 0 || n % 4 == 3);
bool kEven = (k % 2 == 0);
if (kEven == sumEven) cout << "Yes" << endl; // 奇偶相同
else cout << "No" << endl; // 奇偶不同
}
return 0;
}
0 comments
No comments so far...
Information
- ID
- 228
- Time
- ms
- Memory
- MiB
- Difficulty
- 1
- Tags
- (None)
- # Submissions
- 147
- Accepted
- 17
- Uploaded By