寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

AtCoder Problems in C++ #F - 通学経路

第6回日本情報オリンピック 予選の過去問から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
競技プログラミング」を略して、「競プロ」などと呼ばれています。

#F - 通学経路

atcoder.jp

僕が作成、提出したコードは、以下のとおりです。

/*
AtCoder Problems in C++
#F - 通学経路
https://atcoder.jp/contests/joi2007yo/tasks/joi2007yo_f
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  int a,b,n;
  cin>>a>>b>>n;
  vector<int> c1(n),c2(n);
  for(int i=0;i<n;i++){
    cin>>c1[i]>>c2[i];
  }
  vector<vector<int>> arr(a+1,vector<int>(b+1,0));
  vector<vector<int>> arr2(a+1,vector<int>(b+1,0));
  for(int i=0;i<n;i++){
    arr2[c1[i]][c2[i]]=100;
  }
  for(int i=1;i<=a;i++){
    for(int j=1;j<=b;j++){
      if((i==1 && j==1) && arr2[i][j]==0){
        arr[i][j]=1;
      }else if(arr2[i][j]==100){
        arr[i][j]=0;
      }else{
        arr[i][j]=arr[i-1][j]+arr[i][j-1];
      }
    }
  }
  cout<<arr[a][b]<<endl;
  return 0;
}