# PBinfo #3904 – SeqCuts – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Se dă un șir de N caractere, format din litere mici ale alfabetului englez, din care trebuie eliminate K secvențe disjuncte de lungime L. Care este cel mai mic şir din punct de vedere lexicografic ce se poate obține după eliminarea celor K secvențe.  

Date de intrare
Prima linie conține numărul de caractere N al şirului, numărul K al secvențelor care trebuie eliminate şi numărul L al lungimii unei secvențe ce trebuie eliminate. Cea de-a doua linie conţine N litere mici ale alfabetului englez, neseparate prin spaţii.

Date de ieșire
Programul va afișa pe ecran cel mai mic şir din punct de vedere lexicografic ce se poate obține după eliminările făcute.

Restricții și precizări

1 ≤ N ≤ 2.000.000
0 ≤ K * L < N
șirul de caractere este format din litere mici ale alfabetului englez

Exemplu:
Intrare

10 3 2
anaaremere
Ieșire

aame
Explicație
Se vor elimina secvențele anaaremere obținând : aame, acesta fiind cel mai mic şir din punct de vedere lexicografic.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
char s[2000001], st[2000001];
char ch;
int N, K, L, top, NAfterCuts;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N >> K >> L;
    cin >> (s + 1);
    if(K == 0 || L == 0) {
        cout << (s + 1);
        return 0;
    }
    NAfterCuts = N - K * L;
    for(int i = 1;i <= N;i++) {
        while(K > 0 && top >= L && st[top - L + 1] > s[i])
            top -= L, K--;
        st[++top] = s[i];
    }
    st[NAfterCuts + 1] = '\0';
    cout << (st + 1);
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3904)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3904/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3904/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
