Advertisement
Kaidul

ass

Mar 12th, 2013
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <map>
  15. #include <memory>
  16. #include <queue>
  17. #include <set>
  18. #include <sstream>
  19. #include <stack>
  20. #include <string>
  21. #include <utility>
  22. #include <vector>
  23. #include <iomanip>
  24.  
  25. using namespace std;
  26.  
  27. /*** typedef ***/
  28.  
  29. #define MEMSET_INF 127
  30. #define MEMSET_HALF_INF 63
  31. #define stream istringstream
  32. #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
  33. #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
  34. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  35. #define INF (1<<30)
  36. #define PI acos(-1.0)
  37. #define pb push_back
  38. #define ppb pop_back
  39. #define all(x) x.begin(),x.end()
  40. #define mem(x,y) memset(x,y,sizeof(x))
  41. #define memsp(x) mem(x,MEMSET_INF)
  42. #define memdp(x) mem(x,-1)
  43. #define memca(x) mem(x,0)
  44. #define eps 1e-9
  45. #define pii pair<int,int>
  46. #define pmp make_pair
  47. #define ft first
  48. #define sd second
  49. #define vi vector<int>
  50. #define vpii vector<pii>
  51. #define si set<int>
  52. #define msi map<string , int >
  53. #define mis map<int , string >
  54. typedef long long i64;
  55. typedef unsigned long long ui64;
  56.  
  57. /** function **/
  58.  
  59. #define SDi(x) sf("%d",&x)
  60. #define SDl(x) sf("%lld",&x)
  61. #define SDs(x) sf("%s",x)
  62. #define SD2(x,y) sf("%d%d",&x,&y)
  63. #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
  64. #define pf printf
  65. #define sf scanf
  66.  
  67. #define READ(f) freopen(f, "r", stdin)
  68. #define WRITE(f) freopen(f, "w", stdout)
  69.  
  70. int main() {
  71.     //READ("in.txt");
  72.     freopen("RANDOM.txt","r",stdin);
  73.     freopen("output.txt","w",stdout);
  74.     int n;
  75.     bool flag[6000];
  76.     queue<int> q,pre_que;
  77.     priority_queue <pii, vector<pii> ,greater<pii> > pq,prev_calc;
  78.     cin>>n;
  79.     for(int i=0; i<n; i++) {
  80.         int x;
  81.         scanf("%d",&x);
  82.         q.push(x);
  83.     }
  84.     pre_que = q;
  85.     printf("Size \t fault\n");
  86.     for(int i=10; i<=n; i+=10){
  87.         memset(flag,false,sizeof(flag));
  88.         q = pre_que;
  89.         int frame_size = i;
  90.         int frame[6000] = {0},index[6000] = {0};
  91.         int j = 0,fault=0;
  92.         int prev_error;
  93.         while(q.size()) {
  94.             int top = q.front();
  95.             q.pop();
  96.             if(flag[top]){
  97.                 while(pq.top().sd != top){
  98.                     prev_calc.push(pq.top());
  99.                     pq.pop();
  100.                 }
  101.                 prev_calc.push(make_pair(n-q.size(),top));
  102.                 while(pq.size()){
  103.                     prev_calc.push(pq.top());
  104.                     pq.pop();
  105.                 }
  106.                 pq = prev_calc;
  107.                 while(prev_calc.size()) prev_calc.pop();
  108.                 continue;
  109.             }
  110.             if(j<frame_size){
  111.                 index[top] = j;
  112.                 frame[j++] = top;
  113.                 fault++;
  114.                 flag[top] = true;
  115.                 pq.push(make_pair(n - q.size(),top));
  116.                 continue;
  117.             }
  118.             pii pTop = pq.top();
  119.             pq.pop();
  120.             int value = pTop.sd;
  121.             flag[value] = false;
  122.             flag[top] = true;
  123.             int find_idx = index[value];
  124.             frame[ find_idx ] = top;
  125.             pq.push(make_pair(n - q.size(),top));
  126.             fault++;
  127.         }
  128.         while(pq.size()) pq.pop();
  129.         printf("%4d : %5d ",frame_size,fault);
  130.         if(i!=10) printf("%5d",abs(prev_error - fault));
  131.         prev_error = fault;
  132.         puts("");
  133.     }
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement