1 条题解
-
0
A. Kamilka and the Sheep 详细题解
一、问题重述
有 只羊,每只羊有初始美貌值 (互不相同)。你可以选择一个非负整数 ,使每只羊的美貌值增加 。然后选择两只羊,其美貌值为 和 ,愉悦度为 。求最大可能的愉悦度。
二、核心观察
2.1 关键公式
对于任意两个正整数 ,有:
因此 不会超过 。
2.2 上界分析
设最终选择的两只羊的美貌值(加上 后)为 和 (),则:
$$\gcd(x, y) \le y - x \le (\max(a_i) + d) - (\min(a_i) + d) = \max(a_i) - \min(a_i) $$所以最大可能的愉悦度不可能超过 。
2.3 构造达到上界
取 ,即:
$$d = \left( \max(a_i) - \min(a_i) - \min(a_i) \bmod (\max(a_i) - \min(a_i)) \right) \bmod (\max(a_i) - \min(a_i)) $$更简单:选择 使得 是 的倍数。
设 。令 ,则:
- 是 的倍数
- 也是 的倍数
因此:
即可以达到上界 。
三、结论
答案即为:
四、标程代码
#include <bits/stdc++.h> using namespace std; void solve() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end()); cout << a[n - 1] - a[0] << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int tt; cin >> tt; while (tt--) { solve(); } return 0; }
五、示例验证
示例 1:
- ,输出 ✅
示例 2:
- ,输出 ✅
示例 3:
- ,输出 ✅
示例 4:
- ,输出 ✅
六、复杂度分析
- 排序 ,,完全可行
- 也可直接找最大值和最小值
七、总结
这道题的关键是利用 得到上界 ,然后通过构造 证明这个上界可以达到。因此答案非常简单:最大值与最小值的差。
- 1
信息
- ID
- 7274
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者