BestCoder Round #46

本文介绍了一个用于计算给定时钟角度对应的时间的高效算法。通过建立时间与角度之间的映射表,该算法能快速查找并输出相应时间,特别适用于解决与时间计算相关的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 }

 

转载于:https://www.cnblogs.com/ykzou/p/4621746.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值