2011-06-14 21:03:11Morris

d930. B. 薑餅部落的危機

http://zerojudge.tw/ShowProblem?problemid=d930

內容 :

  薑餅部落位於遠得要命王國北方三千公里外,住民僅限於薑餅人一族。該部落散落於海上的島嶼群,由於終年冰雪籠罩因此海面常保持著結冰狀態。

  以往薑餅人們和平地生活於此,但近年來溫室效應影響擴大造成極地暖化,使得薑餅人的性命受到威脅。(它們碰到水會立刻融化!!)

  有鑑於此,薑餅長老下令動員全部人力在所有陸地與海鄰接處築起高牆,以保護其家園不被海水侵蝕。不過薑餅人們的智慧並不高,無法計算需要的圍牆長度,請你寫一個程式幫助它們計算。

輸入說明 :

測資包含多組測試資料,第一列有一個整數 T 表示接下來有幾組測試資料。

  每組測試資料表示一張地圖,其第一列有兩個整數 N, M,代表該地圖的長與寬,地圖由1 構成,0 表示海面、1 表示陸地,地圖外圍皆視同海面 (1 ≤ N, M ≤ 500)

輸出說明 :

對每筆測試資料輸出隔絕海陸所需的圍牆長度。

範例輸入 :

2
4 5
00000
01010
01110
00000
4 5
00000
01110
01010
01100

範例輸出 :

12
16

提示 :

出處 :

2010 NPSC 國中組初賽 (管理:pcshic)



作法 : 模擬
題目看不懂得我,簡直蠢死了


/**********************************************************************************/
/*  Problem: d930 "B. 薑餅部落的危機" from 2010 NPSC 國中組初賽       */
/*  Language: C                                                                   */
/*  Result: AC (36ms, 1254KB) on ZeroJudge                                        */
/*  Author: morris1028 at 2011-06-12 08:46:53                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    int T, a, b, n, m;
    char s[501];
    scanf("%d", &T);
    while(T--) {
        scanf("%d %d", &n, &m);
        int Map[502][502] = {}, Ans;
        for(a = 1; a <= n; a++) {
            scanf("%s", s);
            for(b = 1; b<= m; b++)
                Map[a][b] = s[b-1] - '0';
        }
        n++, m++, Ans = 0;
        for(a = 0; a <= n; a++)
            for(b = 0; b <= m; b++) {
                if(Map[a][b] == 0) {
                    if(a-1 >= 0 && Map[a-1][b] == 1)
                        Ans++;
                    if(a+1 <= n && Map[a+1][b] == 1)
                        Ans++;
                    if(b-1 >= 0 && Map[a][b-1] == 1)
                        Ans++;
                    if(b+1 <= m && Map[a][b+1] == 1)
                        Ans++;
                }
            }
        printf("%d\n", Ans);
    }
    return 0;
}