原题链接 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. _2_head_中标签

    创:20_3_2017修:5_4_2017 什么是title标签? --title   页面名(双) -- 整个html的页面名字,相当于一本书的书名 <title>北门吹雪</ti ...

  2. Jmeter_脚本参数化与内存溢出的解决方案

    这一篇文章随便说一下JMETER的脚本参数化 1:Parameters的两种参数化方法 1.1:函数助手参数化 首先准备你的参数数据.我在bin/data中新建了一个dat文件,记事本另存为修改编码为 ...

  3. 闭包(流畅的python 学习笔记)

    什么是闭包 其实,闭包指延伸了作用域的函数,其中包含函数定义体中引用.但是不在定义体中定义的非全局变量.函数是不是匿名的没有关系,关键是它能访问定义体之外定义的非全局变量. 示例 7-8 averag ...

  4. hadoop初学

    Hadoop: 官网(hadoop.apache.org)的定义: 一:Hadoop Common: 为Hadoop其它模块提供通用的支持 二:HDFS: 是Hadoop的分布式文件系统,其特点是高度 ...

  5. 关于dom4j解析xml

    一:相关jar包 dom4j-1.6.1.jar 二:用例xml文件 三:解析 注:可能有的小白不知道如果获取节点,so,you can: for (Iterator<Element> i ...

  6. HDU D Tree [点分治]

    传送门 题意:找路径积$\mod 1e6+3 = k$的字典序最小点对 作为一个点分治蒟蒻,写这道题花了两节课.... 显然只要开一个桶$c[i]$记录当前路径积为$i$的最小点 然后处理一个子树时一 ...

  7. POJ 3525 Most Distant Point from the Sea [半平面交 二分]

    Most Distant Point from the Sea Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5153   ...

  8. POJ 2826 An Easy Problem?![线段]

    An Easy Problem?! Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12970   Accepted: 199 ...

  9. Python之MYsql、数据库

    一.数据库的操作及安装 1.安装  MySQL Community Server 5.7.16   ----   版本 2.初始化   mysqld --inisialize-insecure 3.启 ...

  10. C primer Plus_part6

    第十章  数组和指针 1.const :保护变量不受改变,特别是在作为入参传入函数 对于变量:const 不能修改值 对于指针: const 可以修改值,但是不能修改指向对象 #include< ...