UVa 11968 - In The Airport

来源:互联网 发布:js图片滑动切换效果 编辑:程序博客网 时间:2024/04/28 04:12

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

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

注意:要用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;}

0 0
原创粉丝点击