AOJ 0571 - JJOOII
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0571
解法
連続した J, O, I をそれぞれカウントし、O の個数が J, I の個数以下のときに O の個数がレベルに相当するので、これの最大値をとればよい。
aoj/0571.cc1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 int main() 6 { 7 static char s[1000001]; 8 scanf("%s", s); 9 int ans = 0; 10 for (const char *p = s; *p != 0;) { 11 static const char joi[] = "JOI"; 12 int cs[3]; 13 for (int i = 0; i < 3; i++) { 14 cs[i] = 0; 15 while (*p != 0 && *p == joi[i]) { 16 ++cs[i]; 17 ++p; 18 } 19 } 20 if (cs[0] >= cs[1] && cs[2] >= cs[1]) { 21 ans = max(ans, cs[1]); 22 } 23 } 24 printf("%d\n", ans); 25 return 0; 26 }