3184 2023. 02. 21 18:33:36 sztomi Blokk elimináció cpp11 Időlimit túllépés 23/50 400ms 3740 KiB
#include <bits/stdc++.h>

using namespace std;

int n, hossz;

int kezdo(int hely){
    int ki;
    int elotte = hely;
    int utana = hossz-1 - hely;

    return max(0, hely-min(elotte, utana));
}

int vegzo(int hely){
    int ki;
    int elotte = hely;
    int utana = hossz-1 - hely;

    return min(hossz-1, hely+min(elotte, utana));
}

bool megold(int akt, vector<int>& helyek, vector<int>& dp){
    if(vegzo(helyek[akt]) == hossz-1){
        return true;
    }

    if(dp[akt] != -1){
        return dp[akt];
    }

    bool ki = false;

    for(int i = akt+1; i < n; i++){
        if(vegzo(helyek[akt]) < helyek[i] &&
            vegzo(helyek[akt])+1 >= kezdo(helyek[i]) &&
            helyek[akt] < kezdo(helyek[i])){

            ki |= megold(i, helyek, dp);
        }
    }

    //cout << akt << " " << helyek[akt] << " " << (ki ? "lehet" : "nem lehet") << "\n";
    dp[akt] = ki;
    return ki;
}

void solve(){
    string s;
    cin >> s;
    s += 'x';
    vector<bool> blokkok;
    int h = 0;
    for(int i = 0; i < s.size()-1; i++){
        h++;
        if(s[i] != s[i+1]){
            blokkok.push_back((h > 1 ? 1 : 0));
            h = 0;
        }
    }
    hossz = blokkok.size();
    vector<int> helyek;
    for(int i = 0; i < blokkok.size(); i++){
        if(blokkok[i]){
            helyek.push_back(i);
        }
    }
    n = helyek.size();
    vector<int> dp(n, -1);
    bool lehet = false;
    for(int i = 0; i < n; i++){
        //cout << "index: " << i << " hely: " << helyek[i] << " kezdo: " << kezdo(helyek[i]) << " vegzo: " << vegzo(helyek[i]) << "\n";
        if(kezdo(helyek[i]) == 0){
            //cout << "indit " << i << " " << helyek[i] << "\n";
            lehet |= megold(i, helyek, dp);
        }
    }

    cout << (lehet ? "IGEN\n" : "NEM\n");

}

int main()
{
    int t;
    cin >> t;
    while(t--){
        solve();
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 23/50
1 Elfogadva 0/0 3ms 1808 KiB
2 Időlimit túllépés 0/0 400ms 1908 KiB
3 Elfogadva 2/2 3ms 2280 KiB
4 Elfogadva 2/2 3ms 2412 KiB
5 Elfogadva 2/2 3ms 2620 KiB
6 Elfogadva 2/2 2ms 2640 KiB
7 Elfogadva 2/2 3ms 2800 KiB
8 Elfogadva 2/2 3ms 2788 KiB
9 Hibás válasz 0/2 3ms 2792 KiB
10 Elfogadva 2/2 3ms 3024 KiB
11 Elfogadva 2/2 3ms 3252 KiB
12 Hibás válasz 0/2 4ms 3472 KiB
13 Elfogadva 2/2 4ms 3452 KiB
14 Elfogadva 2/2 14ms 3484 KiB
15 Hibás válasz 0/3 61ms 3512 KiB
16 Elfogadva 3/3 89ms 3516 KiB
17 Időlimit túllépés 0/3 342ms 3480 KiB
18 Időlimit túllépés 0/3 360ms 3588 KiB
19 Időlimit túllépés 0/3 360ms 3600 KiB
20 Időlimit túllépés 0/3 363ms 3572 KiB
21 Időlimit túllépés 0/4 368ms 3740 KiB
22 Időlimit túllépés 0/4 363ms 3740 KiB