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;
}
目录
相关文章
|
Java
HDU 4256 The Famous Clock
The Famous Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1399    Accepted Submission(s): 940 Problem Description Mr.
861 0
|
机器学习/深度学习 CDN
POJ 2840 Big Clock
Description Our vicar raised money to have the church clock repaired for several weeks. The big clock, which used to strike the hours days...
943 0
POJ 2840 Big Clock
POJ 2840 Big Clock
119 0
hdu 1358 Period
点击打开链接hdu 1358 思路:kmp+最小循环节 分析: 1 题目要求的是给定一个长度为n的字符串,求出字符串的所有前缀字符串中该字符串刚好由k个最小循环节够成,由于题目要求k最大那么就是这个循环节最小 2 只要先求出next数...
775 0

热门文章

最新文章