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;
}
View Code