24h購物| | PChome| 登入
2011-05-29 22:35:47| 人氣435| 回應0 | 上一篇 | 下一篇

d925. 平均高度

推薦 0 收藏 0 轉貼0 訂閱站台

http://zerojudge.tw/ShowProblem?problemid=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 2
2 2 1
2 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;
}

台長: Morris
人氣(435) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: ZeroJudge |
此分類下一篇:d923. 規律
此分類上一篇:a065. 提款卡密碼

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文