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