Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <numeric>
- #include <string>
- #include <cstring>
- #include <set>
- #include <map>
- #include <vector>
- #include <queue>
- #include <iostream>
- #include <iterator>
- #include <cmath>
- #include <cstdio>
- #include <cstdlib>
- #include <sstream>
- using namespace std;
- typedef long long ll;
- typedef vector<int> VI;
- typedef vector<vector<int> > VVI;
- typedef pair<int, int> PII;
- #define FOR(i, x, y) for(ll i=x; i<=y; i++)
- #define FORD(i, x, y) for (ll i = x; i >= y; --i)
- #define REP(i, n) for(ll i=0; i<n; i++)
- #define REPD(i, n) for(ll i = n - 1; i >= 0; --i)
- #define ALL(c) (c).begin(), (c).end()
- #define SORT(c) sort(ALL(c))
- #define UNIQ(c) SORT(c),(c).resize(unique(ALL(c))-(c).begin())
- #define SZ(c) (int)(c).size()
- #define CLEAR(x) memset(x,0,sizeof x)
- #define FILL(x,v) memset(x,v,sizeof x)
- #define pb push_back
- #define mp make_pair
- #define X first
- #define Y second
- const double eps = 1.0e-11;
- const double pi = acos(-1.0);
- struct Node {
- int value;
- Node *next, *prev;
- Node (int index) : value(index), next(NULL), prev(NULL) {}
- };
- struct List {
- Node *begin, *middle, *end;
- size_t size;
- List() : begin(NULL), middle(NULL), end(NULL), size(0) {}
- void Add(int index) {
- if (!begin) {
- size = 1;
- begin = new Node(index);
- end = middle = begin;
- return;
- }
- end->next = new Node(index);
- end->next->prev = end;
- end = end->next;
- ++size;
- if (size % 2 == 0)
- middle = middle->next;
- }
- void Remove() {
- if (size > 1) {
- end = end->prev;
- end->next = NULL;
- if (size % 2 == 0)
- middle = middle->prev;
- --size;
- return;
- }
- begin = middle = end = NULL;
- }
- void Shuffle() {
- if (size < 2)
- return;
- end->next = begin;
- begin->prev = end;
- begin = middle;
- Node* tmp = middle;
- middle = end;
- if (size % 2 == 0)
- middle = middle->next;
- end = tmp->prev;
- begin->prev = NULL;
- end->next = NULL;
- }
- void Print() {
- Node* tmp = begin;
- vector<int> res;
- while(tmp) {
- res.push_back(tmp->value);
- tmp = tmp->next;
- }
- cout << res.size() << endl;
- //cout << middle->value << endl;
- REP(i, SZ(res)) {
- if (i)
- cout << " ";
- cout << res[i];
- }
- cout << endl;
- }
- };
- int main() {
- freopen("kenobi.in", "r", stdin);
- freopen("kenobi.out", "w", stdout);
- int n;
- List l;
- cin >> n;
- REP(i, n) {
- string q;
- cin >> q;
- if (q == "add") {
- int index;
- cin >> index;
- l.Add(index);
- //continue;
- }
- if (q == "take") {
- l.Remove();
- //continue;
- }
- if (q == "mum!") {
- l.Shuffle();
- }
- //l.Print();
- }
- l.Print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment