2013年1月4日 星期五

[ZJ] d925. 平均高度


內容 :
有一長方形, M*N之方格地圖 (完全平坦, 即高度為0)
現在有一大力士往地板槌了T次
若此次槌地板的力量為k, 則此塊地板會凹陷k單位高度, 但周圍地板(上下左右及斜角)會提升k單位高度
問最後此地圖之平均高度
輸入說明 :
測試資料之第一行為三正整數M N T(中間各隔1空格)
其中1<=M、N<=50000且1<=T<=10^5
接下來的T行為正整數Xi Yi Ki(1<=Xi<=M,1<=Yi<=N,1<=Ki<=2^10), 表示(Xi,Yi)為大力士槌的地板位置, 而槌地板的力量為Ki
輸出說明 :
請輸出最後此地圖之平均高度
並將此平均高度四捨五入精準到小數點下兩位
範例輸入 :
3 3 22 2 12 2 1
範例輸出 :
1.56
提示 :
出處 :
(管理:B88000005)


作法 : 模擬
想要偷工減料,結果大失敗,還是老老實實地做吧
/**********************************************************************************/
/*  Problem: d925 "平均高度" from                                             */
/*  Language: C                                                                   */
/*  Result: AC (29ms, 298KB) on ZeroJudge                                         */
/*  Author: morris1028 at 2011-05-29 21:41:15                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    int M, N, T, x, y, k, a, b;
    long long s;
    while(scanf("%d %d %d", &M, &N, &T) == 3) {
        s = 0;
        while(T--) {
            scanf("%d %d %d", &x, &y, &k);
            for(a = -1, s -= k; a <= 1; a++)
                for(b = -1; b <= 1; b++) {
                    if(a == 0 && b == 0) continue;
                    if(x+a >= 1 && x+a <= M && y+b >=1 && y+b <= N)
                        s += k;
                }
        }
        printf("%.2lf\n", (double)s/(M*N));
    }
    return 0;
}

沒有留言:

張貼留言