田忌與齊王各有 n 匹馬(n ≤ 1000),速度已知。每場比賽各出一匹,贏 +200、平 0、輸 -200。求田忌最大期望收益。
將雙方馬速由快到慢排序,維護四個指標:
t_fast, t_slow:田忌最快/最慢馬;k_fast, k_slow:齊王最快/最慢馬。每輪決策:
t_fast > k_fast:最快勝最快,score += 200; t_fast--; k_fast--;t_slow > k_slow:最慢勝最慢,score += 200; t_slow++; k_slow++;t_slow < k_fast:最慢犧牲最快,score -= 200; t_slow++; k_fast--;t_slow++; k_fast--;#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
while (cin >> n && n) {
vector t(n), k(n);
for (int &x : t) cin >> x;
for (int &x : k) cin >> x;
sort(t.begin(), t.end(), greater<int>());
sort(k.begin(), k.end(), greater<int>());
int tf = 0, ts = n-1, kf = 0, ks = n-1;
int score = 0;
while (tf <= ts) {
if (t[tf] > k[kf]) { score += 200; tf++; kf++; }
else if (t[ts] > k[ks]) { score += 200; ts--; ks--; }
else {
if (t[ts] < k[kf]) score -= 200;
ts--; kf++;
}
}
cout << score << '\n';
}
return 0;
}