UVa 11968 - In The Airport

题目:在机场买东西,有饮料和蛋糕,问最接近所有物品平均价格的饮料和蛋糕的价钱。

分析:简单题。直接平均值,比较即可,防止精度误差,都乘以物品总数。

注意:要用long long类型,防止数据溢出。

#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

int m[1001];
int k[1001];
int n[1001];

long long abs( long long a, long long b )
{
	if ( a > b ) return a-b;
	else return b-a;
}

int main()
{
	int T,N,M,K;
	scanf("%d",&T);
	for ( int t = 1 ; t <= T ; ++ t ) {
		scanf("%d%d%d",&N,&M,&K);
		long long avg = 0LL;
		for ( int i = 0 ; i < M ; ++ i ) {
			scanf("%d",&m[i]);
			avg += m[i];
		}
		if ( K + M > N ) K = N - M;
		for ( int i = 0 ; i < K ; ++ i ) {
			scanf("%d",&k[i]);
			avg += k[i];
		}
		N = N - K - M;
		for ( int i = 0 ; i < N ; ++ i ) {
			scanf("%d",&n[i]);
			avg += n[i];
		}
		
		long long sum = M+K+N+0LL;
		
		int min_c = 0;
		for ( int i = 0 ; i < M ; ++ i )
			if ( abs( sum*m[i]-avg ) < abs( sum*m[min_c]-avg ) )
				min_c = i;
			else if ( abs( sum*m[i]-avg ) == abs( sum*m[min_c]-avg ) && m[i] < m[min_c] )
				min_c = i;
		
		int min_j = 0;
		for ( int i = 0 ; i < K ; ++ i )
			if ( abs( sum*k[i]-avg ) < abs( sum*k[min_j]-avg ) )
				min_j = i;
			else if ( abs( sum*k[i]-avg ) == abs( sum*k[min_j]-avg ) && k[i] < k[min_j] )
				min_j = i;
		
		printf("Case #%d: %d %d\n",t,m[min_c],k[min_j]);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值