31842023-02-21 18:33:36sztomiBlokk eliminációcpp11Időlimit túllépés 23/50400ms3740 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ÖsszpontTesztVerdiktIdőMemória
base23/50
1Elfogadva0/03ms1808 KiB
2Időlimit túllépés0/0400ms1908 KiB
3Elfogadva2/23ms2280 KiB
4Elfogadva2/23ms2412 KiB
5Elfogadva2/23ms2620 KiB
6Elfogadva2/22ms2640 KiB
7Elfogadva2/23ms2800 KiB
8Elfogadva2/23ms2788 KiB
9Hibás válasz0/23ms2792 KiB
10Elfogadva2/23ms3024 KiB
11Elfogadva2/23ms3252 KiB
12Hibás válasz0/24ms3472 KiB
13Elfogadva2/24ms3452 KiB
14Elfogadva2/214ms3484 KiB
15Hibás válasz0/361ms3512 KiB
16Elfogadva3/389ms3516 KiB
17Időlimit túllépés0/3342ms3480 KiB
18Időlimit túllépés0/3360ms3588 KiB
19Időlimit túllépés0/3360ms3600 KiB
20Időlimit túllépés0/3363ms3572 KiB
21Időlimit túllépés0/4368ms3740 KiB
22Időlimit túllépés0/4363ms3740 KiB