| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 436418 | 顾鑫辰 | 【C6-7】母舰 | C++ | 解答错误 | 0 | 38 MS | 1032 KB | 1045 | 2026-04-14 16:54:36 |
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int m, n; cin >> m >> n; vector<int> def(m); vector<int> atk(n); for (int i = 0; i < m; i++) cin >> def[i]; for (int i = 0; i < n; i++) cin >> atk[i]; // 排序 sort(def.begin(), def.end()); sort(atk.begin(), atk.end()); int i = m - 1; // 最大防御 int j = n - 1; // 最大攻击 int cnt = 0; // 成功破防数量 // 核心:最大攻击打最大防御 while (i >= 0 && j >= 0) { if (atk[j] > def[i]) { cnt++; i--; j--; } else { j--; } } // 总伤害 = 所有攻击 - 用来破防的攻击 long long total = 0, used = 0; for (int x : atk) total += x; // 取最小的 cnt 个攻击用来破防(伤害最小) for (int k = 0; k < cnt; k++) used += atk[k]; cout << total - used << endl; return 0; }