Problem Description
娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过头哟~”,娜娜问:“我怎样才能醒过来呢?”,天使说:“只要这个钟的时针和分针重合,你就可以进入时光隧道,离开这个地方。”
那你能告诉娜娜还有多久时针和分针才会重合吗?
Input
多组数据,第一行是一个正整数t(t<=100,000),表示数据的组数
对于每组数据,为一个时刻,格式为hh:mm:ss分别表示当时的时、分、秒(采用24小时计时法,范围从00:00:00~23:59:59)
Output
对于每组数据,输出一个浮点数,表示距离下一次时针和分针重合的秒数,误差在1e-4以内将会视为正确。
Sample Input
2 23:59:59 00:00:00
Sample Output
1.000000 3927.272727Hint
本题采用special judge题意:给一个时刻,问距离下一次时针和分针重合还需要多少秒。 解法:一天以内时针和分针总共重合24次,可以把这24个时刻都计算出来,其实就是12/11的整数倍小时,换算成秒就是12*3600/11*k秒(k=1,2,...,24),然后对于每一个时刻,枚举搜索下一次重合的时刻是哪一个,相减即可。 这个是怎么计算出来的呢?我们肯定能确定00:00:00,时针和分针会重合,那么下一次重合是什么时候呢?时针转过一圈是12小时,在这12小时中,时针和分针正好重合了11次,所以相邻两次重合的间隔就是12/11小时。 把每小时重合的秒钟数保存后计算。{(s/3600+h)*30=s/3600*360 -> s=3600/11*h }#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> using namespace std; int main() { int t; int h,m,s; scanf("%d",&t); while(t--) { scanf("%d:%d:%d",&h,&m,&s); int now =(h*60+m)*60+s; for(int i=0;i<24;++i) { if(now<i*12.0/11*3600) { printf("%.8f\n", i*12.0/11*3600-now); break; } } } return 0; }