注解
1、田忌赛马问题。首先按马的能力排序。然后设置四个变量,分别指向当前田忌当前最快和最慢的马,以及对方最快和最慢的马,以下的关键就是这两个变量位置的移动。
2、当田忌此时最慢的马比对方最慢的马还快时,田忌就用这个马跟对方比赛,结果会胜利。
3、当田忌此时最慢的马比对方最慢的马慢时,田忌就用这个马跟对方最快的马比赛,结果会输掉。
4、当二者最慢的马速度相同时:(1)比较田忌最快的马和对方最快的马,如果田忌的好,就让这两个马去比赛,结果会胜利。(2)否则的话,用田忌最慢的马跟对方最快的马比较。如果田忌的差,就输掉。
代码
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1001;
int a[maxn];
int b[maxn];
int n;
int input() {
for(int i=0; i<n; i++) {
cin>>a[i];
}
for(int i=0; i<n; i++) {
cin>>b[i];
}
sort(a, a+n);
sort(b, b+n);
}
int race() {
int my_slow = 0;
int my_fast = n-1;
int he_slow = 0;
int he_fast = n-1;
int win = 0;
int lose = 0;
while(my_slow<=my_fast) {
if(a[my_slow]>b[he_slow]) {
win++;
my_slow++;
he_slow++;
} else if(a[my_slow]<b[he_slow]) {
lose++;
my_slow++;
he_fast--;
} else {
if(a[my_fast]>b[he_fast]) {
win++;
my_fast--;
he_fast--;
} else {
if(a[my_slow]<b[he_fast]) {
lose++;
}
my_slow++;
he_fast--;
}
}
}
return win-lose;
}
int main() {
cin>>n;
while(n) {
input();
int ans = race() * 200;
cout<<ans<<endl;
cin>>n;
}
return 0;
}