Posmatramo nepoznatu strukturu podataka nad celim brojevima. Znamo da je ona tačno jedna od sledećih:
Data je sekvenca operacija umetanja i izbacivanja. Za svako izbacivanje dato je koja vrednost je izašla iz strukture. Potrebno je utvrditi koja od dve strukture (ako ijedna) može da objasni celu sekvencu.
Ako su obe moguće, ispisati not sure
. Ako nijedna ne
odgovara, ispisati impossible
. Ako je tačno jedna moguća,
ispisati stack
ili queue
.
Sa standardnog ulaza se unisi broj upita \(q\) (\(1 \leq q \leq 1000\)). Za svaki upit, sa standardnog ulaza se unosi broj operacija \(n\) (\(1 \leq n \leq 1000\)). Zatim, se unosi \(n\) operacija oblika:
i x
— umetanje vrednosti x
u
strukturu.r x
— izbačeni element iz strukture je
x
.Vrednosti x
je u opsegu od \(-10^5\) do \(10^5\).
Za svaki upit, na standardni izlaz ispisati jednu od četiri mogućnosti:
stack
: ako struktura je sigurno stek;queue
: ako struktura je sigurno red;impossible
: ako nijedna struktura ne odgovara;not sure
: ako mogu biti obe strukture;4 3 i 10 i 20 r 20 6 i 3 i 2 i 5 r 3 r 2 r 5 2 i 7 r 7 4 r 1 i 1 r 1 r 1
stack queue not sure impossible
10, 20
; izbacivanje 20
: jedina
moguća struktura je stek, jer bi red izbacio vrednost 10, a ne 20.3, 2, 5
; izbacivanje 3, 2, 5
:
jedina moguća struktura je red, jer di stek izbacio u redosledu
5, 2, 3
.7
; izbacivanje 7
: može biti i red
i stek.1
iz prazne strukture nije moguće.U ovom bloku se opisuje glavno rešenje zadatka.
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
void simulate(int n)
{
<int> s;
stack<int> q;
queue
bool is_stack = true, is_queue = true;
while (n--) {
char op; int x;
>> op >> x;
cin if (op == 'i') {
if (is_stack) {
.push(x);
s}
if (is_queue) {
.push(x);
q}
} else { // op == 'r'
if (is_stack) {
if (!s.empty() && s.top() == x) {
.pop();
s} else {
= false;
is_stack }
}
if (is_queue) {
if (!q.empty() && q.front() == x) {
.pop();
q} else {
= false;
is_queue }
}
}
}
if (!is_stack && !is_queue) {
<< "impossible" << endl;
cout } else if (!is_queue) {
<< "stack" << endl;
cout } else if (!is_stack) {
<< "queue" << endl;
cout } else {
<< "not sure" << endl;
cout }
}
int main()
{
int q; cin >> q;
while (q--) {
int n; cin >> n;
(n);
simulate}
return 0;
}