Description
HYX 有一个没电的钟表,当前钟表指向了某一个时间,也即当前时针、分针、秒针指向了某个方向。
由于 HYX 有一些很重要的时刻,他希望通过自己手动地不停转动表的秒针,在钟表上复现所有这些时间 (不需要依次复地)。HYX 可以随意地顺时针转动秒针,也可以随意地逆时针转动秒针,分针和时针都会随看秒针按规则转动。HYX需要知道秒针至少转动多少角度就能使得每个时刻至少都可以被访问一次。
需要注意的是,钟表上的 1 种时针分针秒针的组合,可以代表 2 个不同的时间。
Input Data
第一行有一个整数
n
n
n ,代表有多少个时刻要访问。
第二行有三个整数
h
,
m
,
s
h, m, s
h,m,s ,分别代表当前时刻的时分秒。
最后
n
n
n 行中每行有三个整数
h
i
,
m
i
,
s
i
h_i, m_i, s_i
hi,mi,si ,代表每个要访问的时刻的时分秒。
1
≤
n
≤
86
,
400
0
≤
h
,
h
i
<
24
0
≤
m
,
m
i
,
s
,
s
i
<
60
\begin{aligned} & 1 \leq n \leq 86,400 \\ & 0 \leq h, h_i<24 \\ & 0 \leq m, m_i, s, s_i<60 \end{aligned}
1≤n≤86,4000≤h,hi<240≤m,mi,s,si<60
Output Data
在单独的行中输出一个数,代表秒钟转的角度,答案保留两位小数。
Tips:注意时钟表上只有12个小时,不是24个小时,所以要模上43200.
vector<int> v;
signed main() {
ios::sync_with_stdio(0), cin.tie(0);
int n;
cin >> n;
int h, m, s;
cin >> h >> m >> s;
int init = h % 12 * 3600 + m * 60 + s;
v.push_back(init);
int a, b, c;
for (int i = 1; i <= n; i++) {
cin >> a >> b >> c;
int d = a % 12 * 3600 + b * 60 + c;
v.push_back(d);
}
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
deque<int> dq;
for (int i : v) {
dq.push_back(i);
}
//cout << "\n";
while (dq.front() != init) {
dq.push_back(dq.front() + 43200);
dq.pop_front();
}
int ans = 0x3f3f3f3f;
int nn = dq.size();
while (nn--) {
if (ans > 2 * (init - dq.front()) + dq.back() - init) {
ans = 2 * (init - dq.front()) + dq.back() - init;
}
dq.push_front(dq.back() - 43200);
dq.pop_back();
}
dq.push_back(dq.front() + 43200);
dq.pop_front();
// cout << "\n";
nn = dq.size();
while (nn--) {
if (ans > 2 * (dq.back() - init) + init - dq.front()) {
ans = 2 * (dq.back() - init) + init - dq.front();
}
dq.push_back(dq.front() + 43200);
dq.pop_front();
}
cout << fixed << setprecision(2) << (double)ans * 6.0 << "\n";
return 0;
}