-
Notifications
You must be signed in to change notification settings - Fork 0
/
ACarefulApproach.cc
92 lines (83 loc) · 2.19 KB
/
ACarefulApproach.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fst first
#define snd second
#define all(cont) cont.begin(), cont.end()
#define foreach(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define fore(i,a,b) for(int i=a,almo5t=b;i<almo5t;++i)
#define SZ(x) ((int)x.size())
#define EPS 1e-9
#define PI 3.1415926535897932384626433832795
#define MOD 1000000007
#define FIN std::ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
const int N = 9;
typedef long long int ll;
using namespace std;
int n;
pair<double,double> intervals[N];
bool verify(double gap){
bool posible = false;
sort(intervals,intervals+n);
do {
int i = 1;
double start = intervals[0].first;
for(; i < n; i++){
start = max(start, intervals[i].fst-gap);
if(!(start>=intervals[i-1].first && start<=intervals[i].second))break;
double newT = start+gap;
if((newT<=EPS+intervals[i].second)
&& (newT>=intervals[i].first-EPS)){
start = newT;
}else{
break;
}
}
if(i == n){posible = true; break;}
} while ( next_permutation(intervals,intervals+n) );
//cout<<posible<<" lol - \n";
return posible;
}
int main(){
FIN;
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
#define endl '\n'
#endif
cin>>n;
int c = 0;
while(n){
c++;
fore(i,0,n){
int s,e;cin>>s>>e;
intervals[i] = {s,e};
}
double time_g = -1;
int itr = 0;
double start = 0;
double end = 1441;
while(itr<500){
double mid = start+(end-start)/2;
if(verify(mid)){
time_g = mid;
start = mid;
}else{
end = mid;
}
itr++;
}
int min = (int)floor(time_g);
int seg = round((time_g-floor(time_g))*60.0);
if(seg == 60){
seg = 0;
min++;
}
cout<<"Case "<<(c)<<": "<<min<<":";
if(seg<10)cout<<0;
cout<<seg<<"\n";
cin>>n;
}
return 0;
}