はい。

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


問題文はこちら。


#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
",ans);

  return 0;

}

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