Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <list>
- #include <algorithm>
- using namespace std;
- struct SWork;
- struct SWorker{
- vector<SWork*> Jobs;
- SWorker(){
- }
- };
- struct SWork{
- int StartTime;
- int EndTime;
- int Duration;
- SWorker* Worker;
- SWork(int start, int end){
- StartTime = start;
- EndTime = end;
- Duration = end - start;
- Worker = NULL;
- }
- SWork(){
- }
- };
- bool operator< (SWork& A, SWork& B){
- return A.StartTime < B.StartTime;
- }
- bool operator> (SWork& A, SWork& B){
- return A.StartTime > B.StartTime;
- }
- int main(){
- unsigned int workers;
- unsigned int jobs;
- unsigned int start, end;
- unsigned int globalDuration = 0;
- unsigned int globalWorkedDuration = 0;
- vector<SWork*> v_jobs;
- vector<SWorker*> v_workers;
- string garbage;
- cin >> workers >> jobs;
- for(unsigned int i = 0; i < workers; i++){
- SWorker* tmpWrkr = new SWorker;
- v_workers.push_back(tmpWrkr);
- }
- for(unsigned int i = 0; i < jobs; i++){
- cin >> start >> garbage >> end;
- SWork* tmpJob = new SWork(start, end);
- v_jobs.push_back(tmpJob);
- globalDuration += tmpJob->Duration;
- }
- sort(v_jobs.begin(), v_jobs.end());
- for(vector<SWork*>::iterator it = v_jobs.begin(); it != v_jobs.end(); it++){
- SWorker* tmpNigger = NULL;
- for(unsigned int i = 0; i < workers; i++){
- if(v_workers[i]->Jobs.empty()){
- tmpNigger = v_workers[i];
- break;
- }
- else if(v_workers[i]->Jobs.back()->EndTime <= (*it)->StartTime){
- tmpNigger = v_workers[i];
- break;
- }
- else if(v_workers[i]->Jobs.back()->Duration < (*it)->Duration){
- v_workers[i]->Jobs.back()->Worker = NULL;
- globalWorkedDuration -= v_workers[i]->Jobs.back()->Duration;
- v_workers[i]->Jobs.pop_back();
- tmpNigger = v_workers[i];
- break;
- }
- }
- if(tmpNigger){
- tmpNigger->Jobs.push_back((*it));
- (*it)->Worker = tmpNigger;
- globalWorkedDuration += (*it)->Duration;
- }
- }
- cout << "Czas prac " << globalDuration << " Czas wykonanych prac " << globalWorkedDuration << " Czas niewykonanej pracy " << globalDuration - globalWorkedDuration << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment