http://acm.hdu.edu.cn/showproblem.php?pid=1052
贪心策略
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int cmp(const void *a, const void *b)
{
return (*((int *)b)) - (*((int *)a));
}
int main()
{
// freopen("input.txt", "r", stdin);
int n, tj[1005], king[1005];
int i;
int v, l;
while(scanf("%d", &n) && n){
for(i = 0; i < n; i ++){
scanf("%d", &tj[i]);
}
for(i = 0; i < n; i ++){
scanf("%d", &king[i]);
}
qsort(tj, n, sizeof(int), cmp);
qsort(king, n, sizeof(int), cmp);
v = l = 0;
int startj = 0, startk = 0, endj = n-1, endk = n-1;
for(i = 0; i < n; i ++){
if(tj[endj] > king[endk]){//田忌最慢的马与国王最慢的马比,如果田忌最慢的马比国王最慢的马快,那么田忌胜
v ++;
endj --;
endk --;
}
else if(tj[endj] < king[endk]){//如果国王最慢的马比田忌最慢的马快,那么就用国王最快的马和田忌最慢的马比,田忌负
l ++;
endj --;
startk ++;
}
else{//如果两者最慢的马速度相同,就拿国王最快的马和田忌最快的马比
if(tj[startj] > king[startk]){//如果国王最快的马没有田忌最快的马快,那么田忌胜
v ++;
startj ++;
startk ++;
}
else {//如果田忌最快的马不比国王最快的马快,那么就拿国王最快的马和田忌最慢的马比,如果田忌最慢的马比国王最快的马慢,那么田忌负,否则平手
if(tj[endj] < king[startk])
l ++;
endj --;
startk ++;
}
}
}
// printf("v = %d, p = %d, l = %d\n", v, p, l);
printf("%d\n", 200*(v - l));
}
return 0;
}