// UVa 161 - Traffic Lights
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct ev {
int time;
int light;
int turn;
};
bool operator <(const ev & a, const ev & b) {
return a.time < b.time;
}
int main() {
do {
vector<ev> v;
int a;
cin >> a;
if (a == 0)
break;
int n = 0;
while (a != 0) {
// store all events
ev e = { 0, n, true };
while (e.time <= 18000) {
ev f = { e.time + a - 5, e.light, false };
v.push_back(f);
e.time += a + a;
v.push_back(e);
}
// read next light
cin >> a;
n++;
}
// sort by time
sort(v.begin(), v.end());
// turn lights on/off
int ons = n, sol = -1;
for (int i = 0; i < v.size(); i++) {
if (i == 0 || v[i].time == v[i - 1].time || ons < n)
ons += (v[i].turn ? 1 : -1);
else {
sol = v[i - 1].time;
break;
}
}
// output
if (sol == -1)
cout << "Signals fail to synchronise in 5 hours" << endl;
else {
int h = sol / 3600;
int m = (sol % 3600) / 60;
int s = sol % 60;
cout << "0" << h << ":" << m / 10 << m % 10 << ":" << s / 10 << s % 10 << endl;
}
} while (true);
return 0;
}
Saturday, June 6, 2015
UVa 161 - Traffic Lights
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment