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 标签(空格分隔): 暴力枚举 好久没有打题了,退队了有好几个月了,从心底不依赖那个人了,原来以为的爱情戏原来都只是我的独角戏.之前的我有时候好希望有个人出现,告诉自己去哪里,做什么,哪 ...
随机推荐
- 新浪、腾讯、淘宝为何如此重视Web前端?前端入门容易吗?
为什么新浪.搜狐.网易.腾讯.淘宝等在内的各种规模的IT企业,都对web前端越来越重视了呢?小编为您揭晓答案! web前端的由来 以前会Photoshop和Dreamweaver就可以制作网页.随着时 ...
- 033_go语言中的打点器
代码演示 package main import "fmt" import "time" func main() { ticker := time.NewTic ...
- Java项目中经常遇到的一些异常情况
一. 1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存 ...
- Linux常用命令之文件查找which、find、locate命令讲解
在之前的课程中,我们介绍了Linux系统的常用文件处理命令和权限管理命令,今天我们继续来学习Linux操作系统的其他处理命令. 1.文件搜索命令 which 命令解释 命令名称:which 命令所在路 ...
- [HNOI2009]最小圈 题解
题目大意 给你一个有向图,求出图中环的平均值的最小值 环的平均值定义:环中所有的边权和/环中点数量 思路 看到使平均值最大或最小,可以考虑分数规划 分数规划用于解决一些要让平均值最大或最小的问题 具体 ...
- C#LeetCode刷题之#463-岛屿的周长(Island Perimeter)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3794 访问. 给定一个包含 0 和 1 的二维网格地图,其中 1 ...
- JVM垃圾回收(GC)
JVM垃圾回收(GC) 1. 判断对象是否可以被回收 引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,但无法解决对象相互循环引用的问 ...
- Vue 离开页面时的校验-mixin-beforeRouteLeave
一定要看下函数前的注释, 需要在使用的页面定义[needCheckFlag]data属性 一定要看下函数前的注释, 需要在使用的页面定义[needCheckFlag]data属性 一定要看下函数前的注 ...
- [luogu4140] 奇数国
题目 在一片美丽的大陆上有100000个国家,记为1到100000.这里经济发达,有数不尽的账房,并且每个国家有一个银行.某大公司的领袖在这100000个银行开户时都存了3大洋,他惜财如命,因此会不时 ...
- three.js 制作机房(下)
这一篇书接上文,说一说剩下的一些模块. 1. 机箱存储占用比率 机箱存储占用比其实很简单,就是在机箱上新加一个组即可,然后根据比率值来设置颜色,这个颜色我们去HSL(0.4,0.8,0.5) ~ HS ...