Submission #67456853


Source Code Expand

// 綺麗に解きなおし

#include <bits/stdc++.h>
using namespace std;

  /////////////////// メイン ///////////////////

int main() {
  
  //////////////////// 入力 ////////////////////

  int h, w;
  cin >> h >> w;

  // 文字列のvectorとしてグリッドを受け取る
  vector<string> maze(h);
  for (int i=0; i<h; i++){
    cin >> maze.at(i);
  }

  //////////////// 出力変数定義 ////////////////

  int result = 0;

  //////////////////// 処理 ////////////////////

  // 剰余類環の法
  int mod = 1e9+7;

  // 経路数を記録する二次元vector
  // counters.at(i).at(j)は、マス(i,j)への経路数
  // 壁の場合に楽ができるように0で初期化する
  vector<vector<int>> counters(h,vector<int>(w,0));

  // 二次元DP
  for (int i=0; i<h; i++) {
    for (int j=0; j<w; j++) {

      // 壁マスだったら何もしない
      // 0で初期化してあるので、何もしなくていい
      if (maze.at(i).at(j)=='#') continue;

      // 左上のマスの場合
      if (i==0&&j==0) {

        // 明らかに1通り
        counters.at(i).at(j) = 1;

      // 上端列(左上以外)の場合
      } else if (i==0) {

        // すぐ左のマスから来るしかない
        counters.at(i).at(j) = counters.at(i).at(j-1);

      // 左端列(左上以外)の場合
      } else if (j==0) {

        // すぐ上のマスから来るしかない
        counters.at(i).at(j) = counters.at(i-1).at(j);

      // それ以外の場合
      } else {

        // 上から来るか左から来るかの和
        // 足し算のたびに剰余計算をしておく
        counters.at(i).at(j) = (counters.at(i-1).at(j)+counters.at(i).at(j-1))%mod;

      }

    }
  }
  
  // 答えは右下のマスの値
  result = counters.at(h-1).at(w-1);
  
  //////////////////// 出力 ////////////////////

  cout << result << endl;

  //////////////////// 終了 ////////////////////

  return 0;

}

Submission Info

Submission Time
Task H - Grid 1
User wightou
Language C++ 23 (gcc 12.2)
Score 100
Code Size 2054 Byte
Status AC
Exec Time 20 ms
Memory 9452 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 16
Set Name Test Cases
All 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11
Case Name Status Exec Time Memory
0_00 AC 1 ms 3536 KiB
0_01 AC 1 ms 3644 KiB
0_02 AC 1 ms 3532 KiB
0_03 AC 1 ms 3504 KiB
1_00 AC 1 ms 3472 KiB
1_01 AC 1 ms 3472 KiB
1_02 AC 19 ms 9376 KiB
1_03 AC 15 ms 9376 KiB
1_04 AC 15 ms 9320 KiB
1_05 AC 19 ms 9248 KiB
1_06 AC 18 ms 9452 KiB
1_07 AC 18 ms 9296 KiB
1_08 AC 18 ms 9240 KiB
1_09 AC 18 ms 9232 KiB
1_10 AC 18 ms 9184 KiB
1_11 AC 20 ms 9288 KiB