NYOJ 364 田忌赛马 (贪心)

题目链接

好长一篇阅读理解,不过题意不难理解,第一行给出n表示有n场比赛,以下两行分别给出n个数,分别表示田忌和齐王n匹马的速度,赢家从输者手中获得200钱,求田忌最多能赢多少钱。

思路:

1、当田忌最快的马比齐王最快的马快时,用田忌最快的马对抗齐王最快的马,赢一场。

2、当田忌最慢的马比齐王最慢的马快时,用田忌最慢的马对抗齐王最慢的马,赢一场。

3、当1、2都不满足时,用田忌最慢的马对抗齐王最快的马,若田忌最慢的马比齐王最快的慢时,输一场,否则平局。


代码实现:

#include<iostream>
#include<algorithm>
using namespace std;
int tian[1005],king[1005];
bool cmp(int a,int b)
{
	return a>b;
}
int match(int n)
{
	sort(tian,tian+n,cmp);
	sort(king,king+n,cmp);
	int tl=0,tr=n-1,kl=0,kr=n-1,win=0,lose=0;
	while(tl<=tr)
	{
		if(tian[tl]>king[kl])
		{
			win++;
			tl++;
			kl++;
		}
		else if(tian[tr]>king[kr])
		{
			win++;
			tr--;
			kr--;
		}
		else
		{
			if(tian[tr]<king[kl])
				lose++;
			tr--;
			kl++;
		}
	}
	return (win-lose)*200;
}
int main()
{
	int n,i;
	while(cin>>n)
	{
		for(i=0;i<n;i++)
			cin>>tian[i];
		for(i=0;i<n;i++)
			cin>>king[i];
		cout<<match(n)<<endl;
	}
	return 0;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值