fbpx

Problema #3543 – StringPushPop – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dă un string s. Asupra acestuia, se aplică 5 tipuri de operații:

  • (1, c) – se adaugă caracterul c la începutul string-ului
  • (2, c) – se adaugă caracterul c la finalul string-ului
  • (3) – se șterge primul caracter al string-ului
  • (4) – se șterge ultimul caracter al string-ului
  • (5) – string-ul se va transforma în răsturnatul său

Să se afișeze string-ul rezultat după cele q operații.

Date de intrare

Programul citește de la tastatură string-ul s, numărul natural q si cele q query-uri.

Date de ieșire

Programul va afișa pe ecran string-ul rezultat.

Restricții și precizări

  • q si lungimea inițială a lui s sunt mai mici sau egale decat 100.000

Exemplu

Intrare

fnic
7
1 a
3
4
1 o
2 b
5
1 p

Ieșire

pbinfo
#include <bits/stdc++.h>

using namespace std;

char s[100001];
deque<char> Q;

int main(){
    ios::sync_with_stdio(false);
    cin >> s;
    int i = 0;
    while(s[i]){
        Q.push_back(s[i]);
        i++;
    }
    int n;
    cin >> n;
    bool rasturnat = false;
    for(int i = 1; i <= n; ++i){
        int c;
        cin >> c;
        if(c == 1 || c == 2){
            char ch;
            cin >> ch;
            if(c == 1 && !rasturnat)
                Q.push_front(ch);
            else if(c == 1 && rasturnat)
                Q.push_back(ch);
            if(c == 2 && !rasturnat)
                Q.push_back(ch);
            else if(c == 2 && rasturnat)
                Q.push_front(ch);
        }
        else{
            if(c == 3 && !rasturnat)
                Q.pop_front();
            else if(c == 3 && rasturnat)
                Q.pop_back();
            if(c == 4 && !rasturnat)
                Q.pop_back();
            else if(c == 4 && rasturnat)
                Q.pop_front();
            if(c == 5)
                rasturnat = !rasturnat;
        }
    }
    if(rasturnat)
        while(!Q.empty()){
            cout << Q.back();
            Q.pop_back();
        }
    else
        while(!Q.empty()){
            cout << Q.front();
            Q.pop_front();
        }
    return 0;
}
Comentarii

S-ar putea sa iti placa