提交时间:2026-04-15 19:57:49
运行 ID: 436459
#include <iostream> using namespace std; int main() { int M, N; cin >> M >> N; int def[1005], atk[1005]; // 输入敌方防御力 for (int i = 0; i < M; i++) { cin >> def[i]; } // 输入己方攻击力 for (int i = 0; i < N; i++) { cin >> atk[i]; } // 手写冒泡排序:从小到大 // 排序防御 for (int i = 0; i < M-1; i++) { for (int j = 0; j < M-i-1; j++) { if (def[j] > def[j+1]) { int t = def[j]; def[j] = def[j+1]; def[j+1] = t; } } } // 排序攻击 for (int i = 0; i < N-1; i++) { for (int j = 0; j < N-i-1; j++) { if (atk[j] > atk[j+1]) { int t = atk[j]; atk[j] = atk[j+1]; atk[j+1] = t; } } } // 核心贪心:最小能破防的攻击打最小防御 int i = 0, j = 0; while (i < M && j < N) { if (atk[j] > def[i]) { i++; j++; } else { j++; } } // 只有全部防御被破坏,才能造成伤害 if (i < M) { cout << 0 << endl; } else { int sum = 0; for (int k = j; k < N; k++) { sum += atk[k]; } cout << sum << endl; } return 0; }