原题链接 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. commons-logging的使用

    简介 commons-logging是Apache commons类库中的一员.Apache commons类库是一个通用的类库,提供了基础的功能,比如说commons-fileupload,comm ...

  2. 【转】Linux上vi(vim)编辑器使用教程

    Linux上vi(vim)编辑器使用教程 ------------------------------------------------------------ ikong ------------ ...

  3. 跟我一起读postgresql源码(十五)——Executor(查询执行模块之——control节点(上))

    控制节点 控制节点用于完成一些特殊的流程执行方式.由于PostgreSQL为査询语句生成二叉树状的査询计划,其中大部分节点的执行过程需要两个以内的输入和一个输出.但有一些特殊的功能为了优化的需要,会含 ...

  4. Ajax异步信息抓取方式

    淘女郎模特信息抓取教程 源码地址: cnsimo/mmtao 网址:https://0x9.me/xrh6z   判断一个页面是不是Ajax加载的方法: 查看网页源代码,查找网页中加载的数据信息,如果 ...

  5. ASP.NET没有魔法——ASP.NET MVC 模型验证

    在前面的文章中介绍了用户的注册及登录功能,在注册用户时可以通过代码的形式限制用户名及密码的格式,如果不符合要求那么就无法完成操作,如下图: 该功能的原理是Identity基于的Entity Frame ...

  6. Git:fatal: refusing to merge unrelated histories

    如何去解决fatal: refusing to merge unrelated histories 先pull,因为两个仓库不同,发现refusing to merge unrelated histo ...

  7. 单元测试系列:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  8. Spark Streaming编程指南

    Overview A Quick Example Basic Concepts Linking Initializing StreamingContext Discretized Streams (D ...

  9. ABP官方文档翻译 3.3 仓储

     仓储 默认仓储 自定义仓储 自定义仓储接口 自定义仓储实现 基础仓储方法管理数据库连接 查询 获取单个实体 获取实体列表 关于IQueryable 自定义返回值 插入 更新 删除 其他 关于异步方法 ...

  10. Matplotlib快速入门笔记

    我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,快速了解了一下matplotlib绘图库.下图是我学习过程中整理的一些概念. 本文将以该图为线索梳理相关概念. 简介 ...