寝癖頭の解法

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

AtCoder Problems in C++ #H - JOIOJI

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

#H - JOIOJI

www.ioi-jp.org

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

/*
AtCoder Problems in C++
#H - JOIOJI
https://www.ioi-jp.org/camp/2014/2014-sp-tasks/index.html
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
  ll ans=0,num=0;
  ll n;
  string s;
  cin>>n>>s;
  s=" "+s;
  unordered_map<ll,ll> um;
  um[0]=0;
  for(ll i=1;i<s.size();i++){
    switch(s[i]){
      case'J':
        num+=1e6+1;
        break;
      case'O':
        num+=1e6+2;
        break;
      case'I':
        num-=2e6+3;
        break;
    }
    if(um.find(num)!=um.end()){
      ans=max(ans,i-um[num]);
    }else{
      um[num]=i;
    }
  }
  cout<<ans<<endl;
  return 0;
}