田忌赛马的故事大家都听过吧,仔细分析下本题思路大致相同
1.田忌最快的马大于齐王最快的马,直接比之
2.田忌最快的马小于齐王最快的马,拿田忌最慢的马比之
3.田忌最快的马和齐王最快的马速度相等,注意此时要分类讨论
1.田忌最慢的马大于齐王最慢的马,比之
2.田忌最慢的马小于齐王最慢的马,拿田忌最慢的马和齐王最快的马比之
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 1010;
int a[maxn], b[maxn];
int n, money, l1, l2, r1, r2;
int main()
{
scanf("%d",&n);
while(n != 0){
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
for(int i = 0; i < n; i++)
scanf("%d",&b[i]);
sort(a, a+n);
sort(b, b+n);
money = 0;
l1 = l2 = 0; //表示当前马下标也就是最快的马的下标
r1 = r2 = n-1; //表示马的总数和最后一个马也就是最慢的马下标
while(l1 <= r1){
if(a[r1] > b[r2]){ //田忌最快的马比齐王最快的马快,直接比
money += 200;
--r1; --r2;
}
else if(a[r1] < b[r2]){ //田忌最快的马比齐王最快的马慢,则拿最慢的比
money -= 200;
++l1; --r2;
}
else{ //速度相等
if(a[l1] > b[l2]){ //若田忌最慢的马比齐王最慢的马要快,则比两匹最慢的马
money += 200;
++l1; ++l2;
}
else{ //否则用田忌最慢的马和齐王最快的马比
if(a[l1] < b[r2]) money -= 200;
++l1; --r2;
}
}
}
printf("%d\n",money);
scanf("%d",&n);
}
return 0;
}