返回列表 發帖

npsc2010_B薑餅部落的危機

本帖最後由 葉桔良 於 2022-11-4 21:08 編輯

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

以往薑餅人們和平地生活於此,但近年來溫室效應影響擴大造成極地暖化,使得薑餅人的性命受到威脅。(它們碰到水會立刻融化!!)有鑑於此,薑餅長老下令動員全部人力在所有陸地與海鄰接處築起高牆,以保護其家園不被海水侵蝕。不過薑餅人們的智慧並不高,無法計算需要的圍牆長度,請你寫一個程式幫助它們計算。

輸入檔說明
測資包含多組測試資料,第一列有一個整數 T 表示接下來有幾組測試資料。每組測試資料表示一張地圖,其第一列有兩個整數 N, M,代表該地圖的長與寬,地圖由 0 和 1 構成, 0 表示海面、 1 表示陸地,地圖外圍皆視同海面 (1 ≤ N, M ≤ 500)。

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

範例輸入
2
4 5
00000
01010
01110
00000
4 5
00000
01110
01010
01100

範例輸出
12
16

  1. #include <iostream>
  2. using namespace std;
  3. char grid[505][505];

  4. int main() {
  5.     int T, N, M;
  6.     string s;
  7.     cin >> T;
  8.     while (T--){
  9.         cin >> N >> M;
  10.         for (int j = 0; j <= M+1; j++){
  11.             grid[0][j] = '0'; //地圖外圍皆視同海面
  12.         }
  13.         for (int i = 1; i <= N; i++){
  14.             cin >> s;
  15.             grid[i][0] = '0'; //地圖外圍皆視同海面
  16.             for (int j = 1; j <= M; j++){
  17.                 grid[i][j] = s[j-1];
  18.             }
  19.             grid[i][M+1] = '0'; //地圖外圍皆視同海面
  20.         }
  21.         for (int j = 0; j <= M+1; j++){
  22.             grid[N+1][j] = '0'; //地圖外圍皆視同海面
  23.         }
  24.         int ans = 0;
  25.         for (int i = 0; i <= N; i++){
  26.             for (int j = 0; j <= M; j++){
  27.                 if (grid[i][j] != grid[i][j+1]){
  28.                     ans++;
  29.                 }
  30.                 if (grid[i][j] != grid[i+1][j]){
  31.                     ans++;
  32.                 }
  33.             }
  34.         }
  35.         cout << ans << "\n";
  36.     }
  37. }
複製代碼

TOP

返回列表