田忌赛马

描述

    中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?

输入格式

第一行为一个正整数n (n <= 1000) ,表示双方马的数量。
第二行有N个整数表示田忌的马的速度。
第三行的N个整数为齐王的马的速度。

输出格式

仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。

测试样例1

输入


92 83 71 
95 87 74

输出

200

题解:贪心

1、让田忌跑的最慢的马和齐王最慢的马比较,若田忌的快,田忌得一分;

2、若田忌最慢的马和齐王最慢的相等时,比较田忌最快的马和齐王最快的马,若田忌最快的马的速度大于齐王的,

田忌得一分;若田忌最快的马速度小于齐王最快的,让田忌最慢的马和齐王最快的马比较,田忌输一次;

3、若田忌最快的马和齐王最快的马速度相等,进行贪心讨论。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int u[1005],v[1005];
int main(){
	int n;
	while(cin >> n){
	    if(n==0) break;
		for(int i=0;i<n;i++)
			cin >> u[i];
		for(int i=0;i<n;i++)
			cin >> v[i];
		sort(u,u+n);
		sort(v,v+n);
		int a=0,b=0;
		int c=n-1,d=n-1;
		int t=0;
		for(;a<=c;){
			if(u[a]>v[b]){
				t++;
				a++;
				b++;
			}
			else if(u[a]==v[b]){
				if(u[c]>v[d]){
					t++;
					c--;
					d--;
				}
				else{
					if(u[a]>v[d])
					t++;
					else if(u[a]<v[d])
					t--;
					a++;
					d--;
				}
			}
			else {
				t--;
				a++;d--;
			}
		}
		cout << 200*t << endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值