Bekzhan

Untitled

Jan 3rd, 2013
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. /********************************************
  2. ***     Solution by Bekzhan Kassenov      ***
  3. ********************************************/
  4.  
  5. #include <iostream>
  6. #include <cstdio>
  7. #include <fstream>
  8. #include <sstream>
  9. #include <string>
  10. #include <vector>
  11. #include <list>
  12. #include <deque>
  13. #include <queue>
  14. #include <stack>
  15. #include <set>
  16. #include <map>
  17. #include <algorithm>
  18. #include <functional>
  19. #include <math.h>
  20. #include <time.h>
  21. #include <stdlib.h>
  22. #include <iomanip>
  23.  
  24. using namespace std;
  25.  
  26. #define sqr(x) (x) * (x)
  27. #define PII pair <int, int>
  28. #define F first
  29. #define S second
  30. #define MP make_pair
  31. #define PB push_back
  32. #define VI vector <int>
  33. #define VII vector <VI>
  34. #define ll long long
  35. #define ull unsigned long long
  36. #define INF
  37. #define MOD
  38. #define EPS
  39. #define File "kenobi"
  40.  
  41. struct item
  42. {
  43.     int val;
  44.     item *pred, *next;
  45.  
  46.     item(item *a)
  47.         {
  48.             val = a -> val;
  49.             pred = a -> pred;
  50.             next = a -> next;
  51.         }
  52.  
  53.     item()
  54.         {
  55.             pred = NULL, next = NULL;
  56.         }
  57.  
  58.     item(int v, item *a)
  59.         {
  60.             next = NULL;
  61.             pred = a;
  62.             val = v;
  63.         }
  64. };
  65.  
  66. typedef item * pitem;
  67.  
  68. pitem beg = NULL, en = NULL, middle = NULL;
  69.  
  70. int size;
  71.  
  72. void add(int val)
  73. {
  74.     if (size == 0) 
  75.         {
  76.             beg = new item();
  77.  
  78.             beg -> val = val;
  79.             en = beg;
  80.             middle = beg;
  81.             return;
  82.         }
  83.  
  84.     pitem tmp = new item(val, en);
  85.     en -> next = tmp;
  86.     en = tmp;
  87. }
  88.  
  89. void take()
  90. {
  91.     if (size == 0)
  92.         return;
  93.  
  94.     if (size == 1)
  95.         {
  96.             delete en;
  97.             delete beg;
  98.             beg = NULL;
  99.             return;
  100.         }
  101.  
  102.     pitem tmp = en -> pred;
  103.     tmp -> next = NULL;
  104.  
  105.     delete en;
  106.    
  107.     en = tmp;
  108. }
  109.  
  110. void mum()
  111. {
  112.     if (size < 2)
  113.         return;
  114.  
  115.     pitem nen = middle -> pred;
  116.     middle -> pred = NULL;
  117.     nen -> next = NULL;
  118.  
  119.     beg -> pred = en;
  120.     en -> next = beg;
  121.  
  122.     swap(beg, middle);
  123.  
  124.     if (size % 2)
  125.         middle = en;
  126.  
  127.     en = nen;
  128. }
  129.  
  130. void print()
  131. {
  132.     printf("%d\n", size);
  133.  
  134.     for (pitem it = beg; it != NULL; it = it -> next)
  135.        printf("%d ", it -> val);
  136.        
  137.     printf("\n");
  138. }
  139.  
  140. int main()
  141. {
  142.     freopen(File".in", "r", stdin);
  143.     freopen(File".out", "w", stdout);
  144.  
  145.     int n;
  146.  
  147.     scanf("%d", &n);
  148.  
  149.     size = 0;
  150.  
  151.     int tmp;
  152.  
  153.     char s[4];
  154.  
  155.     for (int i = 0; i < n; i++)
  156.         {
  157.            scanf("\n%s", s);
  158.  
  159.             if (s[0] == 'a')
  160.                 {
  161.                     scanf("%d", &tmp);
  162.  
  163.                     add(tmp);
  164.                     size++;
  165.                     if (size % 2 == 0)
  166.                         middle = middle -> next;
  167.                 }
  168.  
  169.             if (s[0] == 't')
  170.                 {
  171.                     if (size > 0)
  172.                         {
  173.                             if (size % 2 == 0)
  174.                                 middle = middle -> pred;
  175.  
  176.                             take();
  177.                             size--;
  178.                        }
  179.                 }
  180.  
  181.             if (s[0] == 'm')
  182.                 {
  183.                     mum();
  184.                 }
  185.         }
  186.  
  187.     print();
  188.  
  189.     return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment