hdu 1052

题目大意:田忌赛马,赢一次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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值