kamilosxd678

AiSD LAB - pracownicy

May 11th, 2012
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <list>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. struct SWork;
  10. struct SWorker{
  11.     vector<SWork*> Jobs;
  12.     SWorker(){
  13.        
  14.     }
  15. };
  16. struct SWork{
  17.     int      StartTime;
  18.     int      EndTime;
  19.     int      Duration;
  20.     SWorker* Worker;
  21.     SWork(int start, int end){
  22.         StartTime = start;
  23.         EndTime   = end;
  24.         Duration  = end - start;
  25.         Worker = NULL;
  26.     }
  27.     SWork(){
  28.     }
  29. };
  30.  
  31. bool operator< (SWork& A, SWork& B){
  32.     return A.StartTime < B.StartTime;
  33. }
  34.  
  35. bool operator> (SWork& A, SWork& B){
  36.     return A.StartTime > B.StartTime;
  37. }
  38.  
  39. int main(){
  40.     unsigned int workers;
  41.     unsigned int jobs;
  42.     unsigned int start, end;
  43.     unsigned int globalDuration = 0;
  44.     unsigned int globalWorkedDuration = 0;
  45.     vector<SWork*> v_jobs;
  46.     vector<SWorker*> v_workers;
  47.     string garbage;
  48.     cin >> workers >> jobs;
  49.     for(unsigned int i = 0; i < workers; i++){
  50.         SWorker* tmpWrkr = new SWorker;
  51.         v_workers.push_back(tmpWrkr);
  52.     }
  53.     for(unsigned int i = 0; i < jobs; i++){
  54.         cin >> start >> garbage >> end;
  55.         SWork* tmpJob = new SWork(start, end);
  56.         v_jobs.push_back(tmpJob);
  57.         globalDuration += tmpJob->Duration;
  58.     }
  59.     sort(v_jobs.begin(), v_jobs.end());
  60.     for(vector<SWork*>::iterator it = v_jobs.begin(); it !=  v_jobs.end(); it++){
  61.         SWorker* tmpNigger = NULL;
  62.         for(unsigned int i = 0; i < workers; i++){
  63.             if(v_workers[i]->Jobs.empty()){
  64.                 tmpNigger = v_workers[i];
  65.                 break;
  66.             }
  67.             else if(v_workers[i]->Jobs.back()->EndTime <= (*it)->StartTime){
  68.                 tmpNigger = v_workers[i];
  69.                 break;
  70.             }
  71.             else if(v_workers[i]->Jobs.back()->Duration < (*it)->Duration){
  72.                 v_workers[i]->Jobs.back()->Worker = NULL;
  73.                 globalWorkedDuration -= v_workers[i]->Jobs.back()->Duration;
  74.                 v_workers[i]->Jobs.pop_back();
  75.                 tmpNigger = v_workers[i];
  76.                 break;
  77.             }
  78.         }
  79.         if(tmpNigger){
  80.             tmpNigger->Jobs.push_back((*it));
  81.             (*it)->Worker = tmpNigger;
  82.             globalWorkedDuration += (*it)->Duration;
  83.         }
  84.     }
  85.     cout << "Czas prac " << globalDuration << " Czas wykonanych prac " << globalWorkedDuration << " Czas niewykonanej pracy " << globalDuration - globalWorkedDuration << endl;
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment