题目大意:田忌赛马,赢一次200,输一次-200,求最多能赢多少?
按升序排序,然后比较:
1.田忌最慢的马比皇上的马快,+200,去除最慢的马
2.田忌最慢的马比皇上的马慢,让最慢的马和皇上最快的比,-200
3.一样快
(1).田忌有马比皇上最快的快,+200,去除
(2).无马比皇上最快的快,最慢跟最快比,-200.(如果选择打平,去除的将是2最快的,不如输掉去除最慢的,必然可以再赢回至少一把)
按以上步骤进行n次比较,得出结果。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int n,i,tian[1010],king[1010];
int tian_f,tian_s,king_f,king_s,money;
while(scanf("%d",&n)!=EOF&&n)
{
memset(tian,0,sizeof(tian));
memset(king,0,sizeof(king));
for(i=0;i<n;i++)
{
scanf("%d",&tian[i]);
}
for(i=0;i<n;i++)
{
scanf("%d",&king[i]);
}
qsort(tian,n,sizeof(tian[0]),cmp);
qsort(king,n,sizeof(king[0]),cmp);
tian_f=king_f=n-1;
tian_s=king_s=money=0;
for(i=0;i<n;i++)
{
if(tian[tian_s]>king[king_s])
{
money+=200;
tian_s++;
king_s++;
}
else if(tian[tian_s]<king[king_s])
{
money-=200;
tian_s++;
king_f--;
}
else
{
if(tian[tian_f]>king[king_f])
{
money+=200;
tian_f--;
king_f--;
}
else
{
if(tian[tian_s]<king[king_f])
{
money-=200;
tian_s++;
king_f--;
}
}
}
}
printf("%d\n",money);
}
return 0;
}