寝癖頭の解法

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

AtCoder Problems in C++ #A - 勇者ビ太郎 (Bitaro the Brave)

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

#A - 勇者ビ太郎 (Bitaro the Brave)

atcoder.jp

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

/*
AtCoder Problems in C++
#A - 勇者ビ太郎 (Bitaro the Brave)
https://atcoder.jp/contests/joi2019ho/tasks/joi2019ho_a
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
  ll h,w;
  cin>>h>>w;
  char s[h][w];
  for(ll i=0;i<h;i++){
    for(ll j=0;j<w;j++){
      cin>>s[i][j];
    }
  }
  ll ans=0;
  vector<ll> v(max(h,w),0);
  for(ll i=h-1;i>=0;i--){
    ll k=0;
    for(ll j=w-1;j>=0;j--){
      if(s[i][j]=='J'){
        ans+=k*v[j];
      }else if(s[i][j]=='O'){
        k++;
      }else if(s[i][j]=='I'){
        v[j]++;
      }
    }
  }
  cout<<ans<<endl;
  return 0;
}