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 }