Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- using namespace std;
- #define forn(i, n) for(int i = 0; i < (int) (n); i++)
- const double eps = 1e-4;
- int main(){
- #ifdef ACM
- freopen("test.in", "r", stdin);
- #endif
- double s[16], e[16]; int n;
- int counter = 1;
- while(scanf("%d", &n) && n != 0){
- forn(i, n){
- scanf("%lf %lf", &s[i], &e[i]);
- }
- double l = 0, r = 1440*60;
- while(r-l > eps){
- double m = (l + r)/2;
- vector<int> perm;
- forn(i, n) perm.push_back(i);
- bool ok = false;
- do{
- double d = s[ perm[0] ];
- bool allset = true;
- forn(i, n){
- if(d <= e[ perm[i] ]){
- d = max(s[ perm[i] ], d)+m;
- }else{
- allset = false;
- break;
- }
- }
- if(allset){ ok = true; break; }
- }while(next_permutation(perm.begin(), perm.end()));
- if(ok) l = m; else r = m;
- }
- int hours = (int) l;
- int mins = round((l - hours)*60.0);
- if(mins == 60) hours++, mins = 0;
- printf("Case %d: %d:%02d\n", counter++, hours, mins);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment