HDU 1209

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

 

你可能感兴趣的:(HDU)