• 两个钟表问题。


    钟表问题解决思路:

    以秒针的转动的角度, 计算分针与时针转过的角度。 即: 模拟现实的场景。

    《1》http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=607&pid=1001

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    
    vector<int> v[5000000];
    
    void Print(int x)
    {
        printf("%02d:%02d:%02d
    ", x/3600, x/60%60, x%60);
    }
    
    int MOD(long long x)
    {
        x%=12000*360;
        if(x<0) x+=12000*360;
        if(x>12000*180) x=12000*360-x;
        return x;
    }
    
    void solve()
    {
        long long h = 0;
        long long m = 0;
        for(int i=0; i<12*60*60; i+=10)
        {
            v[MOD(h-m)].push_back(i);
            h+=1000;//十秒钟, 时针走过的角度(放大的)
            m+=12000;
        }
    }
    
    int main()
    {
        solve();
        int x;
        while(scanf("%d", &x)!=EOF)
        {
            for(int i=0; i<v[x].size(); i++)
                Print(v[x][i]);
        }
        return 0;
    }

    看到另一种精简的解法:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int x;
        while(cin>>x)
        {
            for(int h=0; h<12; ++h)
                for(int m=0; m<60; ++m)
                    for(int s=0; s<60; s+=10)
                    {
                        int a1=h*360000+m*6000+s*100;
                        int a2=m*72000+s*1200;
                        if(min(abs(a1-a2),360*12000-abs(a1-a2))==x)
                            printf("%02d:%02d:%02d
    ",h,m,s);
                    }
        }
        return 0;
    }

    《2》http://acm.hdu.edu.cn/showproblem.php?pid=1006

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<iostream>
    using namespace std;
    
    const int MAXN = 12*60*60;
    double hm, hs, ms, T_hm, T_hs, T_ms;
    void init()
    {
        double h, m, s;
        h=1.0/120;
        m=1.0/10;
        s=6;
        hm=m-h; hs=s-h; ms=s-m;
        T_hm=360/hm;
        T_hs=360/hs;
        T_ms=360/ms;
    }
    
    double Max(double a, double b, double c)
    {
        return max(max(a, b), c);
    }
    
    double Min(double a, double b, double c)
    {
        return min(min(a, b), c);
    }
    
    int main()
    {
        init();
        double n;
        while(scanf("%lf", &n)!=EOF)
        {
            if(n<0) break;
            double i, j, k, a[6], p, q, ans = 0;
            a[0]=n/hm;
            a[1]=n/hs;
            a[2]=n/ms;
            a[3]=(360-n)/hm;
            a[4]=(360-n)/hs;
            a[5]=(360-n)/ms;
            for(i=0; i<=1.0*MAXN; i+=T_hm)
            {
                for(j=0; j<=1.0*MAXN; j+=T_hs)
                {
                    if(j+a[1]>i+a[3]) break;
                    if(i+a[0]>j+a[4]) continue;
                    for(k=0; k<=1.0*MAXN; k+=T_ms)
                    {
                        if(k+a[2]>i+a[3]||k+a[2]>j+a[4])break;  
                        if(i+a[0]>k+a[5]||j+a[1]>k+a[5])continue;  
                        p=Max(i+a[0],j+a[1],k+a[2]);//在这三个时间段刚好完成分离n度,所以取最大值才能保证全都分离n以上  
                        q=Min(i+a[3],j+a[4],k+a[5]);//在这三个时间段刚好完成合并n度,所以取最小值才能保证全都未合并到n以内  
                        if(q>p)  
                            ans+=q-p; 
                    }
                }
            }
            printf("%.3lf
    ", 100.0*ans/MAXN);
        }
        return 0;
    }
  • 相关阅读:
    Python实现以不同分辨率分类视频
    JPA 的增删改查方法
    JPA 中 find() 和 getReference() 的区别
    (三)JPA工具类
    (二)JPA实体类主键生成策略
    (一)配置JPA的开发环境
    自定义视图和自定义视图解析器
    view-controller
    RedirectAttributes 的使用
    SpringMVC视图解析中的 forward: 与 redirect: 前缀
  • 原文地址:https://www.cnblogs.com/acm1314/p/4621707.html
Copyright © 2020-2023  润新知