Submission #1324329

#TimeUsernameProblemLanguageResultExecution timeMemory
1324329benjaminshihKamenčići (COCI21_kamencici)C++20
70 / 70
88 ms175516 KiB
#include <bits/stdc++.h>
using namespace std;
int n,k;
string s;
int memo[355][355][355];
int totored = 0;
int p[355];
bool solve(int l,int r,int k_me){
    int cur = 0;
    int rangered = p[r+1] - p[l];
    int taken = totored - rangered;
    int k_opp = taken - k_me;

    if(k_me >= k) return 0;
    if(k_opp >= k) return 1;

    if(memo[l][r][k_me] != 0){
        return memo[l][r][k_me] == 1;
    }
    bool win = 0;
    int new_red_l = k_me + (s[l] == 'C' ? 1 : 0);
    if(!solve(l+1,r,k_opp)){
        win = 1;
    }
    if(!win){
        int new_red_r = k_me + (s[r] == 'C' ? 1 : 0);
        if(!solve(l,r-1,k_opp)){
            win = 1;
        }
    }
    memo[l][r][k_me] = win ? 1 : 2;
    return win;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> k;
    cin >> s;

    totored = 0;
    p[0] = 0;
    for(int i = 0 ; i < n ; i++)   {
        if(s[i] == 'C') totored++;
        p[i+1] = p[i] + (s[i] == 'C' ? 1 : 0); 
    }
    memset(memo,0,sizeof(memo));
    cout << (solve(0,n-1,0) ? "DA" : "NE");
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...