2011-09-18 08:40:26Morris

d223. Q10137 The Trip

d223. Q10137 The Trip

內容 :

Q10137: The Trip

有一群學生組成一個社團,他們每年都會到國外去旅遊。過去幾年他們已經去過Indianapolis, Phoenix, Nashville, Philadelphia, San Jose, 和 Atlanta。今年春天他們計畫到Eindhoven。

學 生們都同意旅遊所花的錢應該要平均分攤,但是實際上在付錢的時候卻不太方便。所以有人先付車錢,有人付餐費,有人付門票費用。等到旅遊結束後,每個人統計 自己出了多少錢,然後出的比較少的人必須拿錢給出的比較多的人,使得每個人所出的錢都相等,如果無法每個人出的錢相等,最多只能相差一分錢(美金的一分 錢,one cent)。你現在的任務就是:給你每個學生旅遊時出的錢,請你算出最少有多少錢要交換(就是出的少的人拿錢給出的多的人),使得每個人所出的錢都盡可能 接近。

輸入說明 :

輸入含有多組測試資料。

每組測試資料的第一列有1個整數 n,代表學生的人數。接下來的 n 列為每個學生旅遊時出的錢,最小單位為一分錢。學生最多不會超過1000人,每個人出的錢不會超過美金$10,000.00元。

n=0代表輸入結束,請參考Sample Input。

輸出說明 :

對每組測試資料輸出一列 。輸出最少有多少錢要交換,使得每個人所出的錢都盡可能接近。格式請參考Sample Output。

範例輸入 :

3 
10.00 
20.00 
30.00 
4
15.00
15.01
3.00
3.01
5
5000.00
11.11
11.11
11.11
11.11
0

範例輸出 :

$10.00
$11.99
$3991.11

提示 :

出處 :

ACM10137 (管理:nanj0178)



難以敘述的做法, 自己想一下吧

/**********************************************************************************/
/*  Problem: d223 "Q10137  The Trip" from ACM10137                                */
/*  Language: C (589 Bytes)                                                       */
/*  Result: AC(0ms, 236KB) judge by this@ZeroJudge                                */
/*  Author: morris1028 at 2011-09-18 08:31:02                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    int n, A[1000], x, y, i, j;
    while(scanf("%d", &n) == 1 && n) {
        int sum = 0;
        for(i = 0; i < n; i++) {
            scanf("%d.%d", &x, &y);
            A[i] = x*100+y, sum += A[i];
        }
        int ave = sum/n, tmp = 0;
        int t1 = 0, t2 = 0;
        for(i = 0; i < n; i++)
            if(A[i] < ave) {
                t1 += ave - A[i];
                A[i] = ave;
            }
        t2 = t1;
        for(i = 0; i < n; i++)
            if(A[i] > ave) {
                t2 -= A[i] - ave;
                A[i] = ave;
                tmp ++;
            }
        if(t2 < 0) {
            if(-t2 > tmp)
                t1 += -(t2+tmp);
        }
        printf("$%d.%02d\n", t1/100, t1%100);
    }
    return 0;
}