题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1006

题目大意:钟表有时、分、秒3根指针。当任意两根指针间夹角大于等于n°时,就说他们是happy的,问一天有百分之多少时间是happy的。

关键思想:两根指针两根指针地考虑,从重合到重合中有且仅有一段连续时间这两根指针是happy的。共有3种组合(时分、分秒、时秒),所以若以时间为横轴,夹角为纵轴,图像为三个连续三角形。另y大于等于n,得到的图像求符合区间的长度。

代码如下:

//多个连续三角区域求符合要求部分的区间长度
#include <iostream>
using namespace std; const double sv=6.00, mv=0.10, hv=1./120;
const double m_s=sv-mv, h_m=mv-hv, h_s=sv-hv; // 时分、时秒、分秒3组相对速度 int main(){
double sum=0;
double n;
while(cin>>n&&n!=-1){
sum=0;
double bms=n/m_s,ems=(360-n)/m_s,tms=360./m_s; //时分、时秒、分秒3组起始时间和终止时间以及周期
double bhm=n/h_m,ehm=(360-n)/h_m,thm=360./h_m;
double bhs=n/h_s,ehs=(360-n)/h_s,ths=360./h_s;
//12小时足矣 。.000001是为了防止漏跑一次。若除去会导致输入为0时结果不是100.
for(double a1=bhm,a2=ehm;a2<=43200.000001;a1+=thm,a2+=thm){
for(double b1=bms,b2=ems;b2<=43200.000001;b1+=tms,b2+=tms){
if(b2<a1)continue; //优化,否则TLE
if(b1>a2)break;
for(double c1=bhs,c2=ehs;c2<=43200.000001;c1+=ths,c2+=ths){
if(c2<a1 || c2<b1)continue;
if(c1>a2 || c1>b2)break;
sum+=
min(min(a2,b2),c2)-max(max(a1,b1),c1);//找三组都happy的时间,即"最晚始"在"最早终"之前的时间段。
}
}
}
printf("%.3lf\n",sum/432);
}
return 0;
}

  

HDU 1006 [Tick Tick]时钟问题的更多相关文章

  1. HDU 1006 Tick and Tick(时钟,分钟,秒钟角度问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1006 Tick and Tick Time Limit: 2000/1000 MS (Java/Oth ...

  2. HDU 1006 Tick and Tick 时钟指针问题

    Tick and Tick Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. [ACM_模拟] HDU 1006 Tick and Tick [时钟间隔角度问题]

    Problem Description The three hands of the clock are rotating every second and meeting each other ma ...

  4. hdu 1006 Tick and Tick 有技巧的暴力

    Tick and Tick Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. hdu 1006 Tick and Tick

    Tick and Tick Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  6. HDU 1006 Tick and Tick 解不等式解法

    一開始思考的时候认为好难的题目,由于感觉非常多情况.不知道从何入手. 想通了就不难了. 能够转化为一个利用速度建立不等式.然后解不等式的问题. 建立速度,路程,时间的模型例如以下: /******** ...

  7. HDU 1006(时钟指针转角 **)

    题意是说求出在一天中时针.分针.秒针之间距离均在 D 度以上的时间占比. 由于三针始终都在转动,所以要分别求出各个针之间的相对角速度,分别求出三针满足角度差的首次时间,再分别求出不满足角度差的最终时间 ...

  8. HDU 1006 模拟

    Tick and Tick Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. HDU 1006 Digital Roots

    Problem Description The digital root of a positive integer is found by summing the digits of the int ...

随机推荐

  1. 支持持久化的内存数据库-----Redis

    一.Redis概述 1.1.什么是Redis Redis是一种高级key-value数据库.它跟memcached类似,不过数据 可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合 ...

  2. [iOS Animation]-CALayer 隐式动画

    隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画是Core Animation库一个非常显著的 ...

  3. iOS8学习笔记-构建多视图应用程序

    严格来说,凡是UIView的子类都可以称为视图,实际上IOS的图形界面就是视图包含视图的方案,绝大多数的控件都是UIView的子类,但是苹果公司定义的视图术语,通常是指具有相应视图控制器的uiview ...

  4. POJ 3187 Backward Digit Sums

    暴力DFS+验证. 验证如果是暴力检验可能复杂度会太高,事实上可以o(1)进行,这个可以o(n*n)dp预处理. #include<cstdio> #include<cstring& ...

  5. 16、手把手教你Extjs5(十六)Grid金额字段单位MVVM方式的选择

    这一节来完成Grid中的金额字段的金额单位的转换.转换旰使用MVVM特性,总体上和控制菜单的几种模式类似.首先在目录app/view/main/menu下建立文件Monetary.js,用于放金额单位 ...

  6. Photoshop 画基本图形

    作者:zccst 1,画三角形 按下“U”选择“多边形工具”(是个六边形的图标),在上方的菜单栏中的“边”后面输入“3”,然后在画布中拖动就是三角形了,画好后按下CTRL+ENTER键转化成选区,然后 ...

  7. Datetime.GetDateTimeFormats()的集合

    Asp.net中的日期处理函数//2007年4月24日this.TextBox6.Text = System.DateTime.Now.ToString("D");//2007-4 ...

  8. 使用 System.Transactions 进行事物管理

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. [Angular Tutorial] 9 -Routing & Multiple Views

    在这一步中,您将学到如何创建一个布局模板,并且学习怎样使用一个叫做ngRoute的Angular模块来构建一个具有多重视图的应用. ·当您现在访问/index.html,您将被重定向到/index.h ...

  10. iOS 之 网络 NSURLSession

    NSURLSession相比NSURLConnection功能更强大,是更上层的网络封装.相比而言,普通应用场景下NSURLSession没有什么优势,但是,在程序切换到后台的情况下,NSURLSes ...