zoukankan      html  css  js  c++  java
  • hdoj【1006】【未完待续】

    题意:
    时钟的三个指针在两两之间至少D°的时候是开心的,求开心时间占一天的一个百分比。
    思路:
    我们看到这个百分比有三位小数,精度很高。
    一天有24h,24*60min,24*60*60s,那么最小单位是秒。
    换一种方法,考虑一天360*2度。但是可以看到,从秒到分到时间,这样转换到度来说,精度更高吧。
    然后题目是要保证三个指针最少需要保证D°。
    那么我们控制时针每个小时,使得分针最小,转动秒钟。从最小的临界条件,累加到最大的临界状态。那么考虑时间。应该也是最优精度吧。
    ①枚举每个小时,时针的角度=>最小分针的角度=>最小的秒钟角度,利用秒针枚举到最大的临界状态;枚举次数是24*60*60;
    —————————–此时此歌:借过–印子月

    后来开始打的时候发现这个D是实数,所以我们假设这个D是极端的D,小数点后6位,那么方法①貌似不行啊。所以还是到D度上来。
    用角度,但是怎么枚举呢。总体的最小临界到最大临界是不变的,只是枚举方向换了。从被枚举对象秒针变成比单位度更小的单位。
    然后可以看到一天的开始是0°0’0”到720°0’0”,那么就从最小的秒枚举开始,枚举次数是360*60*60,比刚刚的一天多拆分了15倍;
    ②:然后我直接想的就是从起点到终点中间判断一下就好了。
    刚刚还卡机了。。。这个角度就是秒针的角度。
    后来。。。其实把精度扩大的方法就是扩大角度的精度,我把一秒扩大1000倍,这样枚举。。。后来发现就是这样吧。。。我扩大360。。也就是枚举360*30*60*24次
    —————————此时此歌:你的爱–王力宏
    mdzz睡觉。神特么烦

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    const double eps=1e-6;
    const double pi=acos(-1.0);
    const int mod=998244353;
    const int INF=0x3f3f3f3f;
    
    const int N=1e5+10;
    
    double x[N],y[N];
    
    int main()
    {
        int i,j;
        int nn;
        int xx;
        double d;
        double sum;
        double hh,mm,ss;
        double j1,j2,j3;
        double i1,i2,i3;
        nn=100*60*60*24;
        while(~scanf("%lf",&d)){
            if(d==-1) break;
            xx=0;
            for(i=0;i<=nn;i++){
                sum=i*100;
                hh=sum/3600;
                mm=sum/60;
                ss=sum;
                hh=hh-hh/12*12;
                mm=mm-mm/60*60;
                ss=ss-ss/60*60; 
                j1=hh*30;
                j2=mm*6;
                j3=ss*6;
                i1=min(fabs(j1-j2),360-fabs(j1-j2));
                i2=min(fabs(j1-j3),360-fabs(j1-j3));
                i3=min(fabs(j2-j3),360-fabs(j2-j3));
                if(i1-d<=eps)
                    continue;
                if(i2-d<=eps)
                    continue;
                if(i3-d<=eps)
                    continue;
                xx++;
            }
            printf("%.3lf
    ",(double)xx/(double)nn*100);
        }
    
    }
    
  • 相关阅读:
    C#与C++与互操作
    WPF GridView动态添加项并读取数据
    C#使用消息队列(MSMQ)
    使用代码浏览WPF控件模版
    PowerShell将运行结果保存为文件
    opencv + ffmpeg
    vmware
    HttpComponents Downloads
    pytorch 安装
    opencv 3.4.0 的编译
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934432.html
Copyright © 2011-2022 走看看