http://acm.hdu.edu.cn/showproblem.php?pid=1209
水题,按五个时针分针成的锐角从小到大排序,角度相同时间从早到晚,输出中间的那个
时针一小时走30度,一分钟走0.5度,分针一分钟走6度,注意是锐角,大于180要用360减回去,为避免精度出问题统一乘2拒绝小数
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; struct node { int hh, mm; int ang; }kk[5]; int ABS(int x) { return x > 0 ? x : -x; } int cmp(node a, node b) { if(a.ang == b.ang) return a.hh * 60 + a.mm < b.hh * 60 + b.mm; return a.ang < b.ang; } int main() { int T; scanf("%d", &T); while(T--) { for(int i = 0; i < 5; i++) { scanf("%d:%d", &kk[i].hh, &kk[i].mm); kk[i].ang = ABS(kk[i].hh % 12 * 60 + kk[i].mm - kk[i].mm * 12); if(kk[i].ang > 360) kk[i].ang = 720 - kk[i].ang; } sort(kk, kk + 5, cmp); printf("%02d:%02d\n", kk[2].hh, kk[2].mm); } return 0; }