HDU-Tick and Tick
The three hands of the clock are rotating every second and meeting each other many times everyday. Finally, they get bored of this and each of them would like to stay away from the other two. A hand is happy if it is at least D degrees from any of the rest. You are to calculate how much time in a day that all the hands are happy.
Input
The input contains many test cases. Each of them has a single line with a real number D between 0 and 120, inclusively. The input is terminated with a D of -1.
Output
For each D, print in a single line the percentage of time in a day that all of the hands are happy, accurate up to 3 decimal places.
Sample Input
0
120
90
-1
Sample Output
100.000
0.000
6.251
本人实在太菜:
参考自该博主,顺便附上链接膜一波:https://blog.csdn.net/yuyanggo/article/details/45765811
解析:这道题,其实想通了也不难,甚至可以说太简单了。
时钟的时针、分针、秒针一天内的三次重合点:0:00 12:00 24:00
所以计算这道题的是时候,只需要考虑0:00到12:00即可。
设:ws 表示秒针的角速度
wm 表示分针的角速度
wh 表示时针的角速度
wsm=ws-wm 表示秒针相对于分针的角速度
wsh=ws-wh 表示秒针相对于时针的角速度
wmh=wm-wh 表示分针相对于时针的角速度
那么就有:(t1,t2,t3<=12*60*60)
360*(i-1)+d<=wsm*t1<=360*i-d
360*(j-1)+d<=wsh*t2<=360*j-d
360*(k-1)+d<=wmh*t3<=360*k-d
t1、t2、t3可取时间的交集即为答案。
具体实现如下:
用 sum 来记录happy time,以秒为单位。
1.枚举 i ,得到 t1 与 i 对应的左右界:L、R
若 L>=12*60*60 退出循环。
2.枚举 j ,得到 t2 与 j 对应的左右界:L2、R2。
此时应满足[L2,R2]∩[L,R] ≠ 空集。
3.枚举 k ,得到t3 与 k 对应的左右界:L3、R3
此时应满足[L3,R3]∩[L2,R2] ≠ 空集,则 [L3,R3]能使上述三个不等式均成立,为happy time。
sum+=R3-L3。
代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
double sum,d,wsm,wsh,wmh;
int main() {
wsm=59/10.0,wsh=719/120.0,wmh=11/120.0;
double l,r,l2,r2,l3,r3;
int i,j,k;
while(scanf("%lf",&d),d>-0.5) {
for(sum=0,i=1;; i++) {
l=(360*i-360+d)/wsm;
r=(360*i-d)/wsm;
if(l>12*60*60)break;
j=(int)((l*wsh+d)/360);
if((360*j-d)/wsh<=l)j++;
for(;; j++) {
l2=(360*j-360+d)/wsh;
r2=(360*j-d)/wsh;
if(l2<l)l2=l;
if(r2>r)r2=r;
if(l2>=r2)break;
k=(int)((l2*wmh+d)/360);
if((360*k-d)/wmh<=l2)k++;
for(;; k++) {
l3=(360*k-360+d)/wmh;
r3=(360*k-d)/wmh;
if(l3<l2)l3=l2;
if(r3>r2)r3=r2;
if(l3>=r3)break;
sum+=r3-l3;
}
}
}
printf("%.3lf\n",sum/(12*60*60)*100);
}
return 0;
}
HDU-Tick and Tick的更多相关文章
- HDU 1006 Tick and Tick(时钟,分钟,秒钟角度问题)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1006 Tick and Tick Time Limit: 2000/1000 MS (Java/Oth ...
- HDU 1006 Tick and Tick 时钟指针问题
Tick and Tick Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1006 Tick and Tick 有技巧的暴力
Tick and Tick Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1006 Tick and Tick
Tick and Tick Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu1006 Tick and Tick
原题链接 Tick and Tick 题意 计算时针.分针.秒针24小时之内三个指针之间相差大于等于n度一天内所占百分比. 思路 每隔12小时时针.分针.秒针全部指向0,那么只需要计算12小时内的百分 ...
- HDU 1006 Tick and Tick 解不等式解法
一開始思考的时候认为好难的题目,由于感觉非常多情况.不知道从何入手. 想通了就不难了. 能够转化为一个利用速度建立不等式.然后解不等式的问题. 建立速度,路程,时间的模型例如以下: /******** ...
- [ACM_模拟] HDU 1006 Tick and Tick [时钟间隔角度问题]
Problem Description The three hands of the clock are rotating every second and meeting each other ma ...
- 1006 Tick and Tick
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1006 题意: 24小时中,三个指针之间超过某个度数的时间占所有时间的百分比是多少. 思路:主要是物理和数学 ...
- Tick and Tick
The three hands of the clock are rotating every second and meeting each other many times everyday. F ...
- hdu_1006 Tick and Tick(暴力模拟)
hdu1006 标签(空格分隔): 暴力枚举 好久没有打题了,退队了有好几个月了,从心底不依赖那个人了,原来以为的爱情戏原来都只是我的独角戏.之前的我有时候好希望有个人出现,告诉自己去哪里,做什么,哪 ...
随机推荐
- C++Primer学习日记
计划:4.27-4.30 完成IO库.顺序容器两章 4/28 ------------------------------------------------- 为什么要使用using namespa ...
- (转)交叉编译lrzsz
交叉编译lrzsz 2016-03-20 1. 系统环境: Distributor ID: Ubuntu Description: Ubuntu 14.04.1 LTS Release: ...
- CI4框架应用二 - 项目目录
我们之前搭建好了CI4的开发环境,下面我们来看一下CI4的目录结构. Administrator@PC- MINGW64 /c/wamp64/www/ci4 $ ls -l total drwxr-x ...
- PR基础
Windows->Workspace->Reset to saved layout 恢复工作区 Edit->Perferences->Auto Save 设置自动保存时间 资源 ...
- C# Thread.Name 的作用和意义
Thread.Name属性 C#的线程提供Thread.Name属性.这意味着每个线程可以设定一个Name属性来标志它们. Name属性的使用时特性 线程的Name属性默认情况下是null.该值只能被 ...
- Bystack跨链技术源码解读
Bystack是由比原链团队提出的一主多侧链架构的BaaS平台.其将区块链应用分为三层架构:底层账本层,侧链扩展层,业务适配层.底层账本层为Layer1,即为目前比较成熟的采用POW共识的Bytom公 ...
- 初识TypeScript:查找指定路径下的文件按类型生成json
如果开发过node.js的话应该对js(javascript)非常熟悉,TypeScript(以下简称ts)是js的超集. 下面是ts的官网: https://www.tslang.cn/ 1.环境配 ...
- 2020重新出发,JAVA语言,JAVA的诞生和发展史
java的诞生 在1991年时候,James Gosling在Sun公司的工程师小组想要设计这样一种主要用于像电视盒这样的消费类电子产品的小型计算机语言. 这些电子产品有一个共同的特点:计算处理能力和 ...
- 十多位全球技术专家,为你献上近十个小时的.Net微服务介绍
.Net Conf: Focus on Microservices 是 .Net Conf 社区在 2020 年 7 月 30 日举办的线上分享活动.整个活动视频长达近 10 个小时.今天我们来看看都 ...
- LeetCode 413 Arithmetic Slices详解
这个开始自己做的动态规划复杂度达到了O(n), 是用的是2维的矩阵来存前面的数据,复杂度太高了, 虽然好理解,但是没效率,后面看这个博客发现没有动态规划做了这个题 也是比较厉害. 转载地址: http ...