BestCoder Round #46

1001 YJC tricks time

题目链接:1001

题意:给你时针和分针所成的角度,输出现在的时间,以10秒为单位

思路:每10秒,分针走1度,时针走分针的1/12,我们可以根据时间来分别计算出分针和时针走的度数(分针可能走多圈),然后计算出二者的夹角(按题目的格式*12000)

我们可以得到一张时间对夹角的map表,对于输入的夹角,去map中查找是否存在对应的时间即可,除了0和06:00:00以外其他的夹角都对应两个时间,这两个时间互补。

code:

 1 #include <cstdio>

 2 #include <map>

 3 using namespace std;

 4 const int MAXN = 43200;

 5 const int MOD = 4320000;

 6 map<int, int> mp;

 7 

 8 void init()

 9 {

10     for (int i = 0; i < MAXN; i += 10)

11     {

12         int t1 = i * 1200 % MOD;

13         int t2 = i * 100;

14         int t = t1 - t2;

15         if (t2 > t1) t = t2 - t1;

16         if (t > 2160000) t = MOD - t;

17         mp[t] = i;

18     }

19 }

20 

21 void solve(int n)

22 {

23     int hh = n / 3600;

24     int mm = (n - hh * 3600) / 60;

25     int ss = n - hh * 3600 - mm * 60;

26     printf("%02d:%02d:%02d\n", hh, mm, ss);

27 }

28 

29 int main()

30 {

31     init();

32     int n;

33     while (scanf("%d", &n) != EOF)

34     {

35         if (mp.count(n))

36         {

37             int t = mp[n];

38             if (t != MAXN - t && t != 0) solve(MAXN - t);

39             solve(t);

40         }

41     }

42     return 0;

43 }

 

你可能感兴趣的:(round)