解析:贪心:
我们先对你的马和田忌的马进行排序,
然后我们来考虑以下几种情况:
1.当你最慢的马比田忌最慢的马快,赢一场。因为始终要赢田忌最慢的马,不如用最没用的马来赢它。
2.当你最慢的马比田忌最慢的马慢,和田忌最快的马比,输一场。因为你最慢的马始终要输的,不如用它来消耗田忌最有用的马。
详见代码:
#include <bits/stdc++.h>
using namespace std;
int a[200005];
int b[200005];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= n; i++) {
scanf("%d", &b[i]);
}
sort(a + 1, a + n + 1);//排序
sort(b + 1, b + n + 1);//排序
int pa1 = 1;//你最慢的马
int pa2 = n;//你最快的马
int pb1 = 1;//田忌最慢的马
int pb2 = n;//田忌最快的马
int win = 0;//赢的场数
while (pa1 <= pa2) {//只要还有马没比赛
if (a[pa1] > b[pb1]) {//如果你最慢的马比田忌最慢的马快
pa1++;//用你最慢的马赢田忌最慢的马
pb1++;
win++;
} else if (a[pa1] < b[pb1]) {//如果你最慢的马比田忌最慢的马慢
pa1++;//用你最慢的马跟田忌最快的马比
pb2--;//消耗田忌最快的马
}
}
cout << win << endl;
return 0;
}