hdu1209 Clock

简介: hdu1209 Clock

Clock

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6807    Accepted Submission(s): 2156


 

Problem Description

There is an analog clock with two hands: an hour hand and a minute hand. The two hands form an angle. The angle is measured as the smallest angle between the two hands. The angle between the two hands has a measure that is greater than or equal to 0 and less than or equal to 180 degrees.

Given a sequence of five distinct times written in the format hh : mm , where hh are two digits representing full hours (00 <= hh <= 23) and mm are two digits representing minutes (00 <= mm <= 59) , you are to write a program that finds the median, that is, the third element of the sorted sequence of times in a nondecreasing order of their associated angles. Ties are broken in such a way that an earlier time precedes a later time.

For example, suppose you are given a sequence (06:05, 07:10, 03:00, 21:00, 12:55) of times. Because the sorted sequence is (12:55, 03:00, 21:00, 06:05, 07:10), you are to report 21:00.

 

 

Input

The input consists of T test cases. The number of test cases (T) is given on the first line of the input file. Each test case is given on a single line, which contains a sequence of five distinct times, where times are given in the format hh : mm and are separated by a single space.

 

 

Output

Print exactly one line for each test case. The line is to contain the median in the format hh : mm of the times given. The following shows sample input and output for three test cases.

 

 

Sample Input

 

3 00:00 01:00 02:00 03:00 04:00 06:05 07:10 03:00 21:00 12:55 11:05 12:05 13:05 14:05 15:05

 

 

Sample Output

 

02:00 21:00 14:05

 

 

Source

Asia 2003(Seoul)

 

其实本题是一道简单的计算题:

时针:60分钟走一格,一格为360°/12=30°,所以时针的速度为30°/h,即0.5°/min

分针:60分钟走一圈,所以分针的速度为360°/60=6°/min

随后便可以根据其速度来解题了

代码如下:

#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct temp
{
    int h;
    int m;
    double angle;
}a[5];
int cmp(temp x,temp y)
{
    if(x.angle==y.angle)  //角度相同,时间晚的在前面
    {
        if(x.h==y.h)
            return x.m>y.m;
        return x.h>y.h;
    }
    return x.angle>y.angle;//角度小的在前面
}
int main()
{
    int T;
    scanf("%d",&T);
    getchar();
    while(T--)
    {
        double angle,angle_h,angle_m;
        int h,m,i;
        for(i=0;i<5;i++)
        {
            scanf("%d:%d",&h,&m);
            angle_h=30*(h%12)+0.5*m; //计算时针的角度
            angle_m=6*m;//计算分针的角度
            angle=abs(angle_h-angle_m);//夹角
            if(angle>180)  //超过180°的情况
                angle=360-angle;
            a[i].h=h;
            a[i].m=m;
            a[i].angle=angle;
            //printf("%02d:%d  %lf\n",a[i].h,a[i].m,a[i].angle);
        }
        sort(a,a+5,cmp);//排序
        printf("%02d:%02d\n",a[2].h,a[2].m); //按格式输出
    }
    return 0;
}
目录
相关文章
|
7月前
HDU-2089-不要62
HDU-2089-不要62
37 0
|
机器学习/深度学习 Java 算法
|
Java BI
HDU 1412 {A} + {B}
{A} + {B} Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19833    Accepted Submission(s): 8245 Problem Description 给你两个集合,要求{A} + {B}.
841 0
|
机器学习/深度学习 人工智能
|
机器学习/深度学习 人工智能
HDU 2674
  题意:求N!mod2009,N=41时,N!因式分解一定含7*7*41,即N!%2009=0.所以只要计算0
719 0