226
Cerința
Se dă un string s
. Asupra acestuia, se aplică 5
tipuri de operații:
(1, c)
– se adaugă caracterulc
la începutul string-ului(2, c)
– se adaugă caracterulc
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 luis
sunt mai mici sau egale decat100.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