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
原文地址:https://www.cnblogs.com/cton/p/3439345.html