Finished beads and milk2 for usaco
This commit is contained in:
73
usaco/ch1/milk2.cpp
Normal file
73
usaco/ch1/milk2.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
ID: philipp17
|
||||
PROG: milk2
|
||||
LANG: C++
|
||||
*/
|
||||
/* LANG can be C++11 or C++14 for those more recent releases */
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool sorter(const pair<int, bool>& i, const pair<int, bool>& j){
|
||||
if(i.first != j.first){
|
||||
return (i.first < j.first);
|
||||
}
|
||||
|
||||
return (i.second > j.second);
|
||||
}
|
||||
|
||||
int main() {
|
||||
ofstream fout ("milk2.out");
|
||||
ifstream fin ("milk2.in");
|
||||
|
||||
int n;
|
||||
fin >> n;
|
||||
|
||||
vector<pair<int, bool>> events(2 * n);
|
||||
for(int i = 0; i < n; ++i){
|
||||
int start, end;
|
||||
fin >> start >> end;
|
||||
|
||||
events[2 * i] = {start, true};
|
||||
events[2 * i+1] = {end, false};
|
||||
}
|
||||
|
||||
sort(events.begin(), events.end(), sorter);
|
||||
|
||||
int longestMilking = 0, longestIdle = 0, milkers = 0, startMilking = -1, endMilking = -1;
|
||||
|
||||
for(auto e : events){
|
||||
if(e.second){ // So it is time to milk
|
||||
if(milkers == 0 && endMilking != -1){
|
||||
longestIdle = max(longestIdle, e.first - endMilking);
|
||||
} if(milkers == 0){
|
||||
startMilking = e.first;
|
||||
}
|
||||
milkers++;
|
||||
}
|
||||
|
||||
else{ // So milking is stopped somewhere
|
||||
milkers--;
|
||||
|
||||
if(milkers == 0 && startMilking != -1){
|
||||
longestMilking = max(longestMilking, e.first - startMilking);
|
||||
} if(milkers == 0){
|
||||
endMilking = e.first;
|
||||
}
|
||||
}
|
||||
// cout << e.second << " " << e.first << " " << milkers << " " << startMilking << " " << endMilking << " " << longestMilking << " " << longestIdle << endl;
|
||||
}
|
||||
|
||||
fout << longestMilking << " " << longestIdle << endl;
|
||||
|
||||
// for(auto e : events){
|
||||
// cout << e.first << " " << e.second << endl;
|
||||
// }
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user