zoukankan      html  css  js  c++  java
  • HDU1209:Clock

    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
     


     

    注意这题的排序是按照时针与分针的夹角大小来排序的

    #include <stdio.h>
    #include <algorithm>
    #include <math.h>
    using namespace std;
    
    struct Node
    {
        int h,m;
        double r;
    }clock[10000];
    
    int cmp(Node x,Node y)
    {
        if(x.r!=y.r)
        return x.r<y.r;
        return x.h<y.h;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int i;
            for(i = 0;i<5;i++)
            {
                scanf("%d:%d",&clock[i].h,&clock[i].m);
                if(clock[i].h>12)
                clock[i].r = fabs(30.0*(clock[i].h-12)+clock[i].m/2.0-6.0*clock[i].m);
                else
                clock[i].r = fabs(30.0*clock[i].h+clock[i].m/2.0-6.0*clock[i].m);
                if(clock[i].r>180)
                clock[i].r = 360-clock[i].r;
            }
            sort(clock,clock+5,cmp);
            printf("%02d:%02d\n",clock[2].h,clock[2].m);
        }
    
        return 0;
    }
    


     

  • 相关阅读:
    POJ1821 Fence 单调队列优化DP
    ZOJ 4114 dp
    2019 Multi-University Training Contest 2
    Fibonacci 矩阵乘法入门
    C
    258. Add Digits
    292. Nim Game
    345. Reverse Vowels of a String
    344. Reverse String
    169. Majority Element
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3106713.html
Copyright © 2011-2022 走看看