[HDU 1006] Tick and Tick 模拟题
2015-07-23 15:36
357 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1006
题意:给你一个角度n,要你求一天内三个指针角度差都大于n的时间占总时间的百分百
第一次写的时候以为是按秒来算的,写完后发现精度不够,然后再别人博客上看到要用角速度来算。
思路:求出每两个指针的相对角速度(两个指针夹角变化的速度),求出相对周期(可以理解为两个指针第一次重合和第二次重合的时间差),求出每两个指针满足角度关系的时间范围,最后求出交集就好了。
题意:给你一个角度n,要你求一天内三个指针角度差都大于n的时间占总时间的百分百
第一次写的时候以为是按秒来算的,写完后发现精度不够,然后再别人博客上看到要用角速度来算。
思路:求出每两个指针的相对角速度(两个指针夹角变化的速度),求出相对周期(可以理解为两个指针第一次重合和第二次重合的时间差),求出每两个指针满足角度关系的时间范围,最后求出交集就好了。
[code]#include <cstdio> #include <cstring> #include <iostream> using namespace std; const double s_m = 59.0/10.0, s_h = 719.0/120.0, m_h = 11.0/120.0;//相对角速度 const double t_sm = 3600.0/59.0, t_sh = 43200.0/719.0, t_mh = 43200.0/11.0;//相对周期 int main() { int n; double st[3], et[3]; while(~scanf("%d", &n) && ~n){ st[0] = n / s_m; st[1] = n / s_h; st[2] = n / m_h; //满足条件的起始时间 et[0] = (360 - n) / s_m; et[1] = (360 - n) / s_h; et[2] = (360 - n) / m_h;//满足条件的终止时间 double sum = 0; double si[3], ti[3]; //分别求每个相对周期的交集 for(si[0] = st[0], ti[0] = et[0]; ti[0] <= 43200.00001; si[0] += t_sm, ti[0] += t_sm){ for(si[1] = st[1], ti[1] = et[1]; ti[1] <= 43200.00001; si[1] += t_sh, ti[1] += t_sh){ if(ti[0] < si[1]) break; if(si[0] > ti[1]) continue; for(si[2] = st[2],ti[2] = et[2];ti[2] <= 43200.00001;si[2] += t_mh, ti[2] += t_mh){ if(ti[0] < si[2] || ti[1] < si[2]) break; if(si[0] > ti[2] || si[1] > ti[2]) continue; double bi = max(si[0], max(si[1], si[2])); double ed = min(ti[0], min(ti[1], ti[2])); if(ed > bi) sum += ed - bi; } } } printf("%.3lf\n", sum/432.0); } return 0; }
相关文章推荐
- Python 之ConfigParser
- HR系统-人员申请单
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
- 一笔画问题(欧拉回路+半欧拉回路+并查集)
- 23种设计模式全解析
- leetcode 048 —— Rotate Image
- iOS下微信语音播放之切换听筒和扬声器的方法解决方案
- 一键安装lamp脚本--初级版
- 有时候当你修改了xib 你调试,各种改的时候又没变化的时候
- 根据IP判断归属地区
- 明明引入jar包,却依然ClassNOtFoundException
- linux 出行日记(1)
- git和github的使用
- 编写nios-shell时想到的问题-回车vs换行
- hdoj3787 大数A+B
- 顺序表的基本操作
- 卷积公式的理解,卷积其实就是叠加与衰减。
- python数据存储 pprint, pickle
- MHA安装配置
- 励志经典 , 激励人生