Advertisement
Lusien_Lashans

clones

Feb 18th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.08 KB | None | 0 0
  1. #include <cstring>
  2. #include <map>
  3. #include <deque>
  4. #include <queue>
  5. #include <stack>
  6. #include <sstream>
  7. #include <iostream>
  8. #include <iomanip>
  9. #include <cstdio>
  10. #include <cmath>
  11. #include <cstdlib>
  12. #include <ctime>
  13. #include <algorithm>
  14. #include <vector>
  15. #include <set>
  16. #include <complex>
  17. #include <list>
  18. #include <climits>
  19. #include <cctype>
  20. #include <bitset>
  21. //#include <windows.h>
  22.  
  23. using namespace std;
  24.  
  25. #define pb push_back
  26. #define all(v) v.begin(),v.end()
  27. #define rall(v) v.rbegin(),v.rend()
  28. #define sz(v) ((ll)v.size())
  29. #define rep(i,m) for(int i=0;i<(int)(m);++i)
  30. #define repe(i,n,m) for(int i=n;i<=(int)(m);++i)
  31. #define rep2(i,n,m) for(int i=n;i<(int)(m);i++)
  32. #define For(it,c) for(__typeof(c.begin()) it=c.begin();it!=c.end();++it)
  33. #define reset(a,b) memset(a,b,sizeof(a))
  34. #define mp make_pair
  35. #define dot(a,b) ((conj(a)*(b)).X)
  36. #define X real()
  37. #define Y imag()
  38. #define length(V) (hypot((V).X,(V).Y))
  39. #define vect(a,b) ((b)-(a))
  40. #define cross(a,b) ((conj(a)*(b)).imag())
  41. #define normalize(v) ((v)/length(v))
  42. #define rotate(p,about,theta) ((p-about)*exp(point(0,theta))+about)
  43. #define pointEqu(a,b) (comp(a.X,b.X)==0 && comp(a.Y,b.Y)==0)
  44. #define clrq(x) while(!x.empty()) x.pop();
  45. #define clrvv(v) rep(i,sz(v))v[i].clear();
  46. #define debug(x) cerr << #x << ": " << x << endl;
  47. #define debugv(v) cerr << #v << ": ";For(it,v)cerr <<(*it)<<", "; cerr<<endl;
  48.  
  49. typedef stringstream ss;
  50. typedef long long ll;
  51. typedef pair<int, int> pii;
  52. typedef vector<pii> vpii;
  53. typedef vector<string> vs;
  54. typedef vector<int> vi;
  55. typedef vector<double> vd;
  56. typedef vector<vector<int> > vii;
  57. typedef long double ld;
  58. typedef complex<double> point;
  59. typedef pair<point, point> segment;
  60. typedef pair<double, point> circle;
  61. typedef vector<point> polygon;
  62. typedef unsigned long long ull;
  63. typedef long long ll;
  64.  
  65. //==============================================================
  66. // handling triples
  67. typedef pair<ll,pair<ll,ll> > triple;
  68. #define tfirst first
  69. #define tsecond second.first
  70. #define tthird second.second
  71. #define mt(x,y,z) mp(x,mp(y,z))
  72. //---------------------------------------------------------------
  73.  
  74. const int oo = (int) 1e9;
  75. const double PI = 2 * acos(0.0);
  76. const double eps = 1e-9;
  77. vector<int> cloneProgram, cloneCancel;
  78. vector<int> programHistory, programHistoryPrev;
  79. vector<int> cancelHistory, cancelHistoryPrev;
  80. void learn(int cl, int prog){
  81.  programHistory.pb(prog);
  82.  programHistoryPrev.pb(cloneProgram[cl]);
  83.  cloneProgram[cl] = sz(programHistory)-1;
  84.  cloneCancel[cl] = -1;
  85. }
  86. void rollback(int cl){
  87.  cancelHistory.pb(cloneProgram[cl]);
  88.  cancelHistoryPrev.pb(cloneCancel[cl]);
  89.  cloneCancel[cl] = sz(cancelHistory)-1;
  90.  
  91.  cloneProgram[cl] = programHistoryPrev[cloneProgram[cl]];
  92. }
  93. void relearn(int cl){
  94.  int lastProgram = cancelHistory[cloneCancel[cl]];
  95.  
  96.  cloneProgram[cl] = lastProgram;
  97.  
  98.  cloneCancel[cl] = cancelHistoryPrev[cloneCancel[cl]];
  99.  
  100. }
  101. void clone(int cl){
  102.  cloneProgram.pb(cloneProgram[cl]);
  103.  cloneCancel.pb(cloneCancel[cl]);
  104. }
  105. void check(int cl){
  106.  if(cloneProgram[cl] == -1) cout << "basic" << endl;
  107.  else {
  108.   cout << programHistory[cloneProgram[cl]] << endl;
  109.  }
  110. }
  111. void init(){
  112.  cloneProgram.clear();
  113.  cloneProgram.pb(-1);
  114.  cloneProgram.pb(-1);
  115.  cloneCancel.clear();
  116.  cloneCancel.pb(-1);
  117.  cloneCancel.pb(-1);
  118.  programHistory.clear();
  119.  programHistoryPrev.clear();
  120.  cancelHistory.clear();
  121.  cancelHistoryPrev.clear();
  122. }
  123. int main(){
  124.  ios_base::sync_with_stdio(false);
  125.  cin.tie(NULL);
  126.  cout.tie(NULL);
  127. #ifndef ONLINE_JUDGE
  128.  freopen("in.txt", "r", stdin);
  129.  //freopen("out.txt", "w", stdout);
  130. #endif
  131.  int n, m;
  132.  cin >> n >> m;
  133.  init();
  134.  string s;
  135.  int c, p;
  136.  rep(i,n){
  137.   cin >> s;
  138.   if(s == "learn"){
  139.    cin >> c >> p;
  140.    learn(c,p);
  141.   } else if(s == "rollback"){
  142.    cin >> c;
  143.    rollback(c);
  144.   } else if(s == "relearn"){
  145.    cin >> c;
  146.    relearn(c);
  147.   } else if(s == "clone"){
  148.    cin >> c;
  149.    clone(c);
  150.   } else if(s == "check"){
  151.    cin >> c;
  152.    check(c);
  153.   }
  154. //  debugv(cloneProgram);
  155. //  debugv(cloneCancel);
  156. //  debugv(programHistory);
  157. //  debugv(pPrev);
  158. //  debugv(cancelHistory);
  159. //  debugv(cPrev);
  160.  }
  161.  return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement