Guest User

Untitled

a guest
Apr 8th, 2020
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. struct Request {
  7.     Request(int arrival_time, int process_time):
  8.         arrival_time(arrival_time),
  9.         process_time(process_time)
  10.     {}
  11.  
  12.     int arrival_time;
  13.     int process_time;
  14. };
  15.  
  16. struct Response {
  17.     Response(bool dropped, int start_time):
  18.         dropped(dropped),
  19.         start_time(start_time)
  20.     {}
  21.  
  22.     bool dropped;
  23.     int start_time;
  24. };
  25.  
  26. class Buffer {
  27. public:
  28.     Buffer(int size):
  29.         size_(size),
  30.         finish_time_()
  31.     {}
  32.  
  33.     Response Process(const Request &request) {
  34.         // write your code here
  35.         while (!finish_time_.empty()) {
  36.             if (finish_time_.front() <= request.arrival_time)
  37.                 finish_time_.pop();
  38.             else
  39.                 break;
  40.         }
  41.        
  42.         if (finish_time_.size() == size_)
  43.             return Response(true, -1);
  44.        
  45.         if (finish_time_.empty()){
  46.             finish_time_.push(request.arrival_time + request.process_time);
  47.             return Response(false, request.arrival_time);
  48.         }
  49.        
  50.         int last_element = finish_time_.back();
  51.         finish_time_.push(last_element + request.process_time);
  52.         return Response(false, last_element);
  53.     }
  54. private:
  55.     int size_;
  56.     queue <int> finish_time_;
  57. };
  58.  
  59. vector <Request> ReadRequests() {
  60.     vector <Request> requests;
  61.     int count;
  62.     cin >> count;
  63.     for (int i = 0; i < count; ++i) {
  64.         int arrival_time, process_time;
  65.         cin >> arrival_time >> process_time;
  66.         requests.push_back(Request(arrival_time, process_time));
  67.     }
  68.     return requests;
  69. }
  70.  
  71. vector <Response> ProcessRequests(const vector <Request> &requests, Buffer *buffer) {
  72.     vector <Response> responses;
  73.     for (int i = 0; i < requests.size(); ++i)
  74.         responses.push_back(buffer->Process(requests[i]));
  75.     return responses;
  76. }
  77.  
  78. void PrintResponses(const vector <Response> &responses) {
  79.     for (int i = 0; i < responses.size(); ++i)
  80.         cout << (responses[i].dropped ? -1 : responses[i].start_time) << endl;
  81. }
  82.  
  83. int main() {
  84.     int size;
  85.     cin >> size;
  86.     vector <Request> requests = ReadRequests();
  87.  
  88.     Buffer buffer(size);
  89.     vector <Response> responses = ProcessRequests(requests, &buffer);
  90.  
  91.     PrintResponses(responses);
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment