prestige

cf100127B

Nov 30th, 2012
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. #include <algorithm>
  2. #include <numeric>
  3. #include <string>
  4. #include <cstring>
  5. #include <set>
  6. #include <map>
  7. #include <vector>
  8. #include <queue>
  9. #include <iostream>
  10. #include <iterator>
  11. #include <cmath>
  12. #include <cstdio>
  13. #include <cstdlib>
  14. #include <sstream>
  15.  
  16. using namespace std;
  17.  
  18. typedef long long ll;
  19. typedef vector<int> VI;
  20. typedef vector<vector<int> > VVI;
  21. typedef pair<int, int> PII;
  22.  
  23.  
  24. #define FOR(i, x, y) for(ll i=x; i<=y; i++)
  25. #define FORD(i, x, y) for (ll i = x; i >= y; --i)
  26. #define REP(i, n) for(ll i=0; i<n; i++)
  27. #define REPD(i, n) for(ll i = n - 1; i >= 0; --i)
  28.  
  29. #define ALL(c) (c).begin(), (c).end()
  30. #define SORT(c) sort(ALL(c))
  31. #define UNIQ(c) SORT(c),(c).resize(unique(ALL(c))-(c).begin())
  32. #define SZ(c) (int)(c).size()
  33.  
  34. #define CLEAR(x) memset(x,0,sizeof x)
  35. #define FILL(x,v) memset(x,v,sizeof x)
  36.  
  37. #define pb push_back
  38. #define mp make_pair
  39. #define X first
  40. #define Y second
  41.  
  42.  
  43.  
  44. const double eps = 1.0e-11;
  45. const double pi = acos(-1.0);
  46.  
  47. struct Node {
  48. int value;
  49. Node *next, *prev;
  50. Node (int index) : value(index), next(NULL), prev(NULL) {}
  51. };
  52.  
  53. struct List {
  54. Node *begin, *middle, *end;
  55. size_t size;
  56. List() : begin(NULL), middle(NULL), end(NULL), size(0) {}
  57. void Add(int index) {
  58. if (!begin) {
  59. size = 1;
  60. begin = new Node(index);
  61. end = middle = begin;
  62. return;
  63. }
  64. end->next = new Node(index);
  65. end->next->prev = end;
  66. end = end->next;
  67. ++size;
  68. if (size % 2 == 0)
  69. middle = middle->next;
  70. }
  71. void Remove() {
  72. if (size > 1) {
  73. end = end->prev;
  74. end->next = NULL;
  75. if (size % 2 == 0)
  76. middle = middle->prev;
  77. --size;
  78. return;
  79. }
  80. begin = middle = end = NULL;
  81. }
  82. void Shuffle() {
  83. if (size < 2)
  84. return;
  85. end->next = begin;
  86. begin->prev = end;
  87. begin = middle;
  88. Node* tmp = middle;
  89. middle = end;
  90. if (size % 2 == 0)
  91. middle = middle->next;
  92. end = tmp->prev;
  93. begin->prev = NULL;
  94. end->next = NULL;
  95. }
  96. void Print() {
  97. Node* tmp = begin;
  98. vector<int> res;
  99. while(tmp) {
  100. res.push_back(tmp->value);
  101. tmp = tmp->next;
  102. }
  103. cout << res.size() << endl;
  104. //cout << middle->value << endl;
  105. REP(i, SZ(res)) {
  106. if (i)
  107. cout << " ";
  108. cout << res[i];
  109. }
  110. cout << endl;
  111. }
  112. };
  113.  
  114.  
  115. int main() {
  116. freopen("kenobi.in", "r", stdin);
  117. freopen("kenobi.out", "w", stdout);
  118.  
  119. int n;
  120. List l;
  121. cin >> n;
  122. REP(i, n) {
  123. string q;
  124. cin >> q;
  125. if (q == "add") {
  126. int index;
  127. cin >> index;
  128. l.Add(index);
  129. //continue;
  130. }
  131. if (q == "take") {
  132. l.Remove();
  133. //continue;
  134. }
  135. if (q == "mum!") {
  136. l.Shuffle();
  137. }
  138. //l.Print();
  139. }
  140. l.Print();
  141. return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment