# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
754041 | vjudge1 | JJOOII 2 (JOI20_ho_t2) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
int n, k;
cin >> n >> k;
string s;
cin >> s;
vector<int> pj;
vector<int> po;
vector<int> pi;
for( int i = 0; i < n; i++ ) {
if( s[i] == 'J') {
pj.pb(i);
}
}
if( pj.size() >= k ) {
for( int i = 0; i < n; i++ ) {
if( s[i] == 'O') {
po.pb(i);
}
}
if( po.size() >= k ) {
for( int i = 0; i < n; i++ ) {
if( s[i] == 'I') {
pi.pb(i);
}
}
if( pi.size() >= k ) {
ll sum = 0;
for( int i = 1; i < k; i++ ) {
sum += pi[i]-pi[i-1]-1;
}
int j = -1;
for( int i = po.size()-1; i >= 0; i-- ) {
if( po[i] < pi[0] ) {
j = i;
break;
}
}
if( j+1 >= k ) {
sum += pi[0]-po[k-1]-1;
for( int i = max(1,j+2-k); i < max(k,j); i++ ) {
sum += po[i] - po[i-1] - 1;
}
int it = -1;
for( int i = pj.size()-1; i >= 0; i-- ) {
if( pj[i] < po[0] ) {
it = i;
break;
}
}
if( it+1 >= k ) {
sum += po[max(0,j+1-k)]-pj[max(k-1,it)]-1;
for( int i = max(1,it+2-k); i < max(k,it); i++ ) {
sum += pj[i] - pj[i-1] - 1;
}
cout << sum << "\n";
for( int i: pj ) {
cout << i+1 << ' ';
}
cout << "\n";
for( int i: po ) {
cout << i+1 << ' ';
}
cout << "\n";
for( int i: pi ) {
cout << i+1 << ' ';
}
} else {
cout << -1;
}
} else {
cout << -1;
}
} else {
cout << -1;
}
} else {
cout << -1;
}
} else {
cout << -1;
}