310
Cerința
Se dă un string s. Asupra acestuia, se aplică 5 tipuri de operații:
(1, c)– se adaugă caracterulcla începutul string-ului(2, c)– se adaugă caracterulcla 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
qsi lungimea inițială a luissunt 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