原题链接 Tick and Tick

题意

计算时针、分针、秒针24小时之内三个指针之间相差大于等于n度一天内所占百分比。

思路

每隔12小时时针、分针、秒针全部指向0,那么只需要计算12小时内的百分比就行。

秒针转动速度 6度/s

分针转动速度 1/10度/s

时针转动速度 1/120度/s

那么秒针与分针的相对速度为 59/10度/s

秒针与时针的相对速度为 719/120度/s

分针和时针的相对速度为 11/120度/s

计算两个指针相差一度需要的时间:

秒针和分针 sm=10/59s/度

秒针和时针 sh=120/719s/度

分针和时针 hm=120/11s/度

计算两个指针从分离到再次重合的周期:

秒针和分针 cir_sm=360*sm=3600/59s

秒针和时针 cir_sh=360*sh=43200/719s

分针和时针 cir_hm=360*hm=43200/11s

当degrees=n时

两个指针开始happy的时间:

s_sm=n*sm , s_sh=n*sh , s_hm=n*hm;//两指针间隔不再小于n的开始时间

两个指针结束happy的时间:

e_sm=cir_sm-s_sm , e_sh=cir_sh-s_sh , e_hm=cir_hm-s_hm;//两指针大于等于n的结束时间

两个指针happy的时间段:

秒针和分针happy时间的区间[s_sm,e_sm]

秒针和时针happy时间的区间[s_sh, e_sh]

分针和时针happy时间的区间[s_hm,e_hm]

显而易见,三个区间的交集就是三个指针都happy的时间段

start=max(s_sm,s_sh,s_hm);

end=min(e_sm,e_sh,e_hm);

如果 start < end

则区间 [start,end]就是三个区间的happy时间段

AC代码

#include<iostream>
#include<stdio.h>
using namespace std;

double sm=10./59.,sh=120./719.,hm=120./11.;
double cir_sm=3600./59.,cir_sh=43200./719.,cir_hm=43200./11.;
double s_sm,s_sh,s_hm;          //start
double e_sm,e_sh,e_hm;          //end

double mymax(double a,double b,double c)
{
    if(a>b&&a>c)
    return a;
    if(b>a&&b>c)
    return b;
    return c;
}
double mymin(double a,double b,double c)
{
    if(a<b&&a<c)
    return a;
    if(b<a&&b<c)
    return b;
    return c;
}

int main()
{
    int n;//degrees
    double res;
    double start,end;
    while(cin>>n&&n!=-1)
    {
        res=0.0;
        s_sm=n*sm , s_sh=n*sh , s_hm=n*hm;
        e_sm=cir_sm-s_sm , e_sh=cir_sh-s_sh , e_hm=cir_hm-s_hm;
        start=mymax(s_sm,s_sh,s_hm);
        end=mymin(e_sm,e_sh,e_hm);
        while(start<=43200&&end<=43200)
        {
            if(start<end)
            res+=end-start;

            //judge
            if(end==e_sm)
            {
                s_sm+=cir_sm; e_sm+=cir_sm;
            }
            else if(end==e_sh)
            {
                s_sh+=cir_sh; e_sh+=cir_sh;
            }
            else if(end==e_hm)
            {
                s_hm+=cir_hm; e_hm+=cir_hm;
            }

            start=mymax(s_sm,s_sh,s_hm);
            end=mymin(e_sm,e_sh,e_hm);
        }
        printf("%.3f\n",res/432.);
    }
    return 0;
}

如有不当之处欢迎指出!

hdu1006 Tick and Tick的更多相关文章

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

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

  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. HDU 1006 Tick and Tick(时钟,分钟,秒钟角度问题)

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

  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. hdu1006 Tick and Tick (数学题 借鉴了大神的博客)

    先缩短一半的时间:早上的12个小时和下午的12小时对时钟是一样的,因为时钟12小时与0小时的三针位置相同.接着就是了解到每次所有的针从有重合到再次有重合至多有一段连续的段符合三针分离度大于n.所以只要 ...

  6. hdu_1006 Tick and Tick(暴力模拟)

    hdu1006 标签(空格分隔): 暴力枚举 好久没有打题了,退队了有好几个月了,从心底不依赖那个人了,原来以为的爱情戏原来都只是我的独角戏.之前的我有时候好希望有个人出现,告诉自己去哪里,做什么,哪 ...

  7. Tick and Tick

    The three hands of the clock are rotating every second and meeting each other many times everyday. F ...

  8. 1006 Tick and Tick

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1006 题意: 24小时中,三个指针之间超过某个度数的时间占所有时间的百分比是多少. 思路:主要是物理和数学 ...

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

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

随机推荐

  1. Java序列化小结

    title: Java序列化小结 date: 2017-05-06 20:07:59 tags: 序列化 categories: Java基础 --- Java序列化就是将一个对象转化成一串二进制表示 ...

  2. Log4j扩展使用--输出地Appender

    OK,现在我们来研究输出低Appended. Appender控制日志输出的位置 Log4j日志系统允许把日志输出到不同的地方,如控制台(Console).文件(Files).根据天数或者文件大小产生 ...

  3. 浅谈Await

    1.Await为什么不会导致堵塞 我们都知道Await关键字是.Net FrameWork4.5引入的特性.await使得我们使用异步更加时特别便捷,并且还不会导致线程堵塞.我们在使用时也就莫名其妙的 ...

  4. 微信支付JSAPI公众号支付授权目录

    详情 http://yangjunwei.com/a/1815.html

  5. hibernate 持久化对象的三个状态

    Hibernate中的对象有3种状态 瞬时对象(TransientObjects).持久化对象(PersistentObjects)和离线对象(DetachedObjects也叫做脱管对象) Tran ...

  6. 开发JQuery插件(转)

    教你开发jQuery插件(转)   阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...

  7. 在线生成PDF的网站-HTML 转 PDF 在线

    http://pdf.df5d.com/   (服务器问题,演示暂停了,但是 下面介绍的组件还是可以使用的) 将前面用到的wkhtmltopdf用一个服务器程序集成在一起,接受一个URL参数,在生成一 ...

  8. 面向切面编程之手动JDK代理方式

    需求描述: 抽取dao层开启和提交事物交由代理类一并执行 分析: 假如UserDao接口中有很多方法,例如addUser().deleteUser().updateUser()等等,需要频繁的和数据库 ...

  9. JAVA中默认的编码方式

    转:http://blog.csdn.net/scyatcs/article/details/31356823 编码问题存在两个方面:JVM之内和JVM之外.1.Java文件编译后形成class这里J ...

  10. 随机切换IP和UA

    在爬虫爬取过程中,网站会根据我们的IP和UA去确认到底是浏览器操作还是爬虫在操作,所以,为了让爬虫不被网站禁止,随机切换Ip 和UA是很重要的,因为这个类在各个爬虫中经常要用到,所以可以自已维护一份随 ...