blob: 6775ca2eedcb60ae676a85fdb64bc3c1fd991e77 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#include<iostream>
#include<fstream>
using namespace std;
template<class T>
class node {
public:
node(T key, node<T>* next) : _key{key}, _next{next} {}
node(T key) : _key{key}, _next{nullptr} {}
const T& key() const { return _key; }
T& key() { return _key; }
const node<T>*& next() const { return _next; }
node<T>*& next() { return _next; }
private:
T _key;
node<T>* _next;
};
template<class T>
class Coda {
public:
Coda() : _head{nullptr}, _tail{nullptr} {}
~Coda() {
}
Coda<T>* enqueue(T val) {
if(!_head) {
_head = new node<T>{val, nullptr};
_tail = _head;
} else {
_tail->next() = new node<T>{val, nullptr};
_tail = _tail->next();
}
return this;
}
node<T>* pop() {
if(!_head) return nullptr;
node<T>* elem = _head;
delete _head;
_head = elem->next();
return elem;
}
bool is_empty() { return _head == nullptr; }
private:
node<T>* _head;
node<T>* _tail;
};
int main() {
ifstream in("input.txt");
ofstream out("output.txt");
for(int ts = 0; ts < 100; ++ts) {
string t;
int n;
in >> t;
switch(t.at(0)) {
case 'b': {
Coda<bool>* queue = new Coda<bool>{};
in >> n;
bool e;
for(int i = 0; i < n; ++i) {
in >> e;
queue->enqueue(e);
}
while(!queue->is_empty())
out << queue->pop()->key() << ' ';
out << endl;
break;
}
case 'd': {
Coda<double>* queue = new Coda<double>{};
in >> n;
double e;
for(int i = 0; i < n; ++i) {
in >> e;
queue->enqueue(e);
}
while(!queue->is_empty())
out << queue->pop()->key() << ' ';
out << endl;
break;
}
case 'c': {
Coda<char>* queue = new Coda<char>{};
in >> n;
char e;
for(int i = 0; i < n; ++i) {
in >> e;
queue->enqueue(e);
}
while(!queue->is_empty())
out << queue->pop()->key() << ' ';
out << endl;
break;
}
case 'i': {
Coda<int>* queue = new Coda<int>{};
in >> n;
int e;
for(int i = 0; i < n; ++i) {
in >> e;
queue->enqueue(e);
}
while(!queue->is_empty())
out << queue->pop()->key() << ' ';
out << endl;
break;
}
}
}
in.close();
out.close();
return 0;
}
|