This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
#define ss second
#define ff first
int main() {
ll n , k ; cin >> n >> k ;
string s ; cin >> s ;
pair <ll , char> a[n+4] ;
ll idx = 0 ;
ll kf = 0 , ks = 0 ;
ll p = 0 , c = 0 ;
for (int i = 0 ; i < n ; i++ ) {
if ( s[i] == 'P' ) {
if ( c != 0 ) {
idx ++ ; a[idx].ff = c ; a[idx].ss = 'C' ;
c = 0 ;
}
p ++ ;
}
else {
if ( p != 0 ) {
idx ++ ; a[idx].ff = p ; a[idx].ss = 'P' ;
p = 0 ;
}
c ++ ;
}
}
if ( p > 0 ) {
idx ++ ; a[idx].ff = p ; a[idx].ss = 'P' ;
}
if ( c > 0 ) {
idx ++ ; a[idx].ff = c ; a[idx].ss = 'C' ;
}
ll turn = 1 ;
ll l = 1 , r = idx ;
for ( int i = 1 ; i <= n ; i ++ ) {
if ( turn == 1 ) {
if ( a[l].ss != a[r].ss ){
if (a[l].ss == 'P' ) a[l].ff--;
else {a[r].ff-- ; }
}
else if ( a[l].ss == 'C' && a[r].ss == 'C' ) {
if ( a[l].ff == a[r].ff-1 ) {
a[r].ff -- ; kf ++ ;
}
else if ( a[r].ff == a[l].ff-1 ) {
a[l].ff -- ; kf ++ ;
}
else {
if ( a[l].ff < a[r].ff ) {
a[l].ff -- ; kf ++ ;
}
else {
a[r].ff -- ; kf ++ ;
}
}
}
else {
ll pl = a[l].ff / 2 ;
if ( a[l].ff % 2 ) pl ++ ;
ll pr = a[r].ff / 2 ;
if ( a[r].ff % 2 ) pr ++ ;
if ( pl > pr ) {
a[l].ff -- ;
}
else {
a[r].ff -- ;
}
}
turn ++ ;
}
if ( kf >= k ) break ;
if ( a[l].ff == 0 ) l ++ ;
if ( a[r].ff == 0 ) r-- ;
if ( turn == 2 ) {
if ( a[l].ss != a[r].ss ){
if (a[l].ss == 'P' ) a[l].ff--;
else a[r].ff-- ;
}
else if ( a[l].ss == 'C' && a[r].ss == 'C' ) {
if ( a[l].ff == a[r].ff-1 ) {
a[r].ff -- ; ks ++ ;
}
else if ( a[r].ff == a[l].ff-1 ) {
a[l].ff -- ; ks ++ ;
}
else {
if ( a[l].ff < a[r].ff ) {
a[l].ff -- ; ks ++ ;
}
else {
a[r].ff -- ; ks ++ ;
}
}
}
else {
ll pl = a[l].ff / 2 ;
if ( a[l].ff % 2 ) pl ++ ;
ll pr = a[r].ff / 2 ;
if ( a[r].ff % 2 ) pr ++ ;
if ( pl > pr ) {
a[l].ff -- ;
}
else {
a[r].ff -- ;
}
}
turn -- ;
}
if ( ks >= k ) break ;
if ( a[l].ff == 0 ) l ++ ;
if ( a[r].ff == 0 ) r -- ;
}
if ( ks >= k ) cout << "DA" ;
else cout << "NE" ;
return 0 ;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |