//自信のない解法。左からgreedyにKUROIを作っていく、?は無視する。 //もう一度左からKUROIを作っていく。 #include #include using namespace std; int main() { static string s; static bool used[100] = {false}; cin >> s; char *sub = "KUROI"; int cor = 0, cnt = 0; for( int i = 0; i < s.length(); i++ ){ if( s[i] == sub[cor] ){ cor = (cor + 1) % 5; cnt += (cor == 0); used[i] = true; } } //中途半端な分を再度使えるようにする for( int i = s.length() - 1; i >= 0; i-- ){ if( cor == 0 ) break; if( used[i] ){ cor = (cor + 4) % 5; used[i] = false; } } for( int i = 0; i < s.length(); i++ ){ if( (s[i] == sub[cor] || s[i] == '?') && !used[i] ){ cor = (cor + 1) % 5; cnt += (cor == 0); used[i] = true; } } cout << cnt << endl; return 0; }