题目描述
中国古代的历史故事"田忌赛马"是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?
输入
第一行为一个正整数n (n < = 2000) ,表示双方马的数量。
第二行有N个整数表示田忌的马的速度。
第三行的N个整数为齐王的马的速度。
输出
仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。
样例输入
3 92 83 71 95 87 74
样例输出
200
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
int main()
{
int N;
scanf("%d",&N);
int tj[N],qw[N];
for(int i=0;i<N;i++){
scanf("%d",&tj[i]);
}
for(int i=0;i<N;i++){
scanf("%d",&qw[i]);
}
qsort(tj,N,sizeof(int),compare);
qsort(qw,N,sizeof(int),compare);
int a=0,b=0;
int n=N-1,m=N-1;
int count=0;
while(a<=m)
{
if(tj[m]>qw[n])
{
m--;
n--;
count++;
}
else if(tj[a]>qw[b])
{
a++;
b++;
count++;
}
else if(tj[a]<qw[b])
{
a++;
n--;
count--;
}
else{
if(tj[a]>qw[n])
{
a++;
n--;
count++;
}
else if(tj[a]<qw[n])
{
a++;
n--;
count--;
}
else{
n--;
a++;
}
}
}
printf("%d\n",count*200);
return 0;
}