Submission #701058

#TimeUsernameProblemLanguageResultExecution timeMemory
701058RichemJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
73 ms3172 KiB
#include <iostream> #include <set> using namespace std; const int MAX_TAILLE = 2e5+42, INF = 1e9; int taille, niveau; string mot; int cumul[MAX_TAILLE][3] = {0}; int dicho(int posDeb, int type) { int deb = posDeb, fin = taille-1; if(posDeb == -1 || cumul[taille][type] - cumul[posDeb][type] < niveau) return -1; while(deb < fin) { int milieu = (deb + fin) / 2; if(cumul[milieu+1][type] - cumul[posDeb][type] < niveau) { deb = milieu+1; } else { fin = milieu; } } return deb; } int main() { cin >> taille >> niveau; cin >> mot; for(int cur = 0; cur < taille; cur++) { if(mot[cur] == 'J') cumul[cur+1][0]++; else if(mot[cur] == 'O') cumul[cur+1][1]++; else cumul[cur+1][2]++; for(int type = 0; type < 3; type++) { cumul[cur+1][type] += cumul[cur][type]; } } int rep = INF; for(int deb = 0; deb < taille; deb++) { int posCur = deb; bool bon = 1; for(int type = 0; type < 3; type++) { posCur = dicho(posCur, type); if(posCur == -1) bon = 0; } if(bon) { rep = min(rep, posCur - deb - 3 * niveau + 1); } } if(rep == INF) { cout << "-1"; } else { cout << rep; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...