intさわだんのBlack History

刹那的レジェンドになりたい。

JOI本選過去問 第11回 日本情報オリンピック本選 一問目 JJOOII

はい。

おそらく誰でも解けるでしょう。


問題文はこちら


#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;



long n = 0;

char s[1000003];

long int ans = 0;

int main(){



  scanf("%s",s);

  n = strlen(s);


  for(long i = 0;i < n;i++){


    if(s[i] != 'J'){
      continue;
    }else{
      long int nau = i + 1;
      long lenj = 1,leno = 0,leni=0;

      while(1){
	if(s[nau] == 'J'){
	  lenj++;
	  nau++;
	}else{
	  break;
	}
      }

      if(lenj < ans){
	i = nau ;
	continue;
      }

      while(1){
	if(s[nau] == 'O'){
	  leno++;
	  nau++;
	}else{
	  break;
	}
      }
      if(leno > lenj || leno < ans){
	i = nau-1;
	continue;
      }

      while(1){
	if(s[nau] == 'I'){
	  leni++;
	  nau++;
	}else{
	  break;
	}
      }

      if(leni < leno || leni < ans){
	i = nau - 1;
	continue;
      }

      ans = max(min(min(lenj,leno),leni),ans);

      i = nau - 1;
    }
  }

  printf("%ld\n",ans);

  return 0;

}

ソース汚すぎてしにたい...