Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <queue>
- #include <vector>
- #include <cstring>
- using namespace std;
- #define Max 1000
- priority_queue <pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > pq, temp;
- queue <int> pageStream, backup;
- bool flag[Max];
- int N, save, var, i, age, frameLength, fault, top, frame[Max], index[Max];
- int main() {
- freopen("in.txt", "r", stdin);
- cin >> N;
- save = N;
- while(N--) {
- cin >> var;
- pageStream.push(var);
- }
- backup = pageStream, N = save; // back-up
- for (i = 10; i <= N; i += 10) {
- // reseting variable and restore
- pq = priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > ();
- memset(flag, false, sizeof flag);
- frame[Max] = {0}, index[Max] = {0};
- pageStream = backup, frameLength = i, age = fault = 0;
- while(!pageStream.empty()) {
- top = pageStream.front(), pageStream.pop();
- if(age < frameLength) {
- index[top] = age;
- frame[age++] = top;
- fault++;
- flag[top] = true;
- pq.push(make_pair(N - pageStream.size(), top));
- continue;
- }
- if(flag[top]) {
- while(!pq.empty()) {
- if(pq.top().second == top) {
- temp.push(make_pair(N - pageStream.size(), top));
- continue;
- }
- temp.push(pq.top());
- pq.pop();
- }
- pq = temp;
- temp = priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > ();
- continue;
- }
- var = pq.top().second;
- pq.pop();
- flag[var] = false;
- flag[top] = true;
- int find_idx = index[var];
- frame[ find_idx ] = top;
- pq.push(make_pair(N - pageStream.size(), top));
- fault++;
- }
- cout << frameLength << " " << fault << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement