• HDU 4177 Avoiding a disaster


    三月份省赛选拔赛的题目,一直没有做。

    比赛的时候做不出来,当时可能没有想到用scanf,只用了string.h的方法做了很久,做不出来,样例没过,结果只做了三题,排第9.

    三月份的时候实在太渣了···

    总结:

    1.暴力求解最简单,可能代码稍长点。

    2.这题要考虑一些点:如果确定时间中心点。画一条时间轴可以看得很清楚  

      _________|__________|__________|____|___________________________

             0:00      5:00    10:00  12:00

        对于样例1,正确的找正确钟点是0:00,5:00,10:00。明显,这种情况是不能直接找出他们的时间差绝对值确定的。

        所以应该将每个时间点都进行移动,看能不能找到中间时间点。

    3.找到中间时间点之后,还要判断它们之间的时间差是否为4:00,如果是,那么久不能确定这个时间。否则,中间点就是答案了。

     1 #include <stdio.h>
     2 
     3 inline int ab(int x) { return x >= 0 ? x : -x ;}
     4 
     5 int cal(int x,int y,int z,int &k)
     6 {
     7     if(ab(x-y)==ab(y-z)) {
     8         k = y; return ab(x-y);
     9     }
    10     else if(ab(x-z)==ab(y-z)) {
    11         k = z; return ab(x-z);
    12     }
    13     else if(ab(x-y)==ab(z-x)) {
    14         k = x; return ab(x-y);
    15     }
    16     else { k = -1 ; return -1;}
    17 }
    18 int tx[8] , ti[8];
    19 int h[4] , m[4] , re[4];
    20 int main()
    21 {
    22     int T;
    23     scanf("%d",&T);
    24     while(T--)
    25     {
    26         int re[4] , dis;
    27         for(int i=1;i<=3;i++){
    28             scanf("%d:%d",&h[i],&m[i]);
    29         }
    30         for(int i=1;i<=3;i++)
    31         {
    32             re[i] = h[i]*60+m[i];
    33         }
    34         int ok = 0;
    35         tx[1] = cal(re[1],re[2],re[3],ti[1]);
    36         tx[2] = cal(re[1]+720,re[2],re[3],ti[2]);
    37         tx[3] = cal(re[1],re[2]+720,re[3],ti[3]);
    38         tx[4] = cal(re[1],re[2],re[3]+720,ti[4]);
    39         tx[5] = cal(re[1]-720,re[2],re[3],ti[5]);
    40         tx[6] = cal(re[1],re[2]-720,re[3],ti[6]);
    41         tx[7] = cal(re[1],re[2],re[3]-720,ti[7]);
    42         for(int i=1;i<=7;i++)
    43         {
    44             if(tx[i] > 0) 
    45             {
    46                 ok = 1;
    47                 if(tx[i] == 4*60) {
    48                     printf("Look at the sun
    ");
    49                     break;
    50                 }
    51                 else {
    52                     printf("The correct time is %d:%02d
    ",
    53                         ti[i]/60,ti[i]%60);
    54                     break;
    55                 }
    56             }
    57         }
    58         if(!ok) printf("Look at the sun
    ");
    59     }
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    Transformers 简介(下)
    OpenCV-Python 姿态估计 | 五十
    Transformers 简介(上)
    OpenCV-Python 相机校准 | 四十九
    在Keras中可视化LSTM
    分析师和统计学家可以和谐相处吗?
    Array类模板
    C++中 公有继承 私有继承 和保护继承的区别
    文件输入输出
    PTA(浙大数据结构,c语言)
  • 原文地址:https://www.cnblogs.com/cton/p/3439345.html
Copyright © 2020-2023  润新知