• UESTCSpring科学营——蛋糕(结论题)


    今天是鲍勃的生日,爱丽丝打算做一个蛋糕送给他。
    这是鲍勃的 n 岁生日,所以爱丽丝的蛋糕必须是正 n 边形。而且,鲍勃很喜 欢数字 m,所以这个蛋糕必须放在一个正 m 边形的盒子里。为了让气氛更加浪漫, 爱丽丝将在蛋糕的中心插上一根蜡烛,显然,蜡烛既在蛋糕的中心,又在盒子的 中心是最好的。
    换句话说,爱丽丝应该使正 n 边形的蛋糕能被容纳在正 m 边形的盒子里,且 使其中心重合。事实上,爱丽丝已经做好了蛋糕,蛋糕是边长为 1 的正 n 边形, 现在她想知道,正 m 边形盒子的最小边长是多少。
    输入
    每组测试数据包含多行,以 EOF 作为文件结束,每行包括两个正整数 n 和 m
    输出
    输出包含多行,每行包含一个整数,代表最小的符合条件的正 m 边形盒子的 边长,保留 4 位小数。
    样例输入
    【样例输入 1】
    4 8
    【样例输出 1】
    0.5412
    【样例输入 2】
    8 4
    【样例输出 2】
    2.4142
    样例输出
    提示
    对于 20%的数据,n,m≤100;
    对于 40%的数据,n,m≤10000;
    对于 60%的数据,n,m≤1000000;
    对于 80%的数据,n,m≤100000000;
    对于 100%的数据,n,m≤1000000000。

    神tm1e9岁生日

    结论证不了

    只会打表瞎yy推80分规律

    真正证法是要在n边形和m边形之间夹一个lcm(n,m)lcm(n,m)边形,这样能保证内部的的可以角顶角,外部的的可以边顶边,这样就可以很方便的推出公式来了

    反正最后的结论就是l=cos(πlcm(m,n))tan(πm)sin(πn)l= frac{cos(frac{π}{lcm(m,n)})* tan(frac{π}{m})}{sin( frac{π}{n})}

    然后随便乱搞一下就出来了

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll m,n;
    const double pai=acos((double)-1);
    inline int gcd(ll a,ll b){
        if(b==0)return a;
        else return gcd(b,a%b);
    } 
    inline int lcm(ll a,ll b)
    {
        return a*b/gcd(a,b);
    }
    int main(){
        while(scanf("%I64d%I64d",&n,&m)!=EOF)
        {
            printf("%.4lf
    ",cos(pai/lcm(n,m))*tan(pai/m)/sin(pai/n));
        }
        return 0;
    }
    
  • 相关阅读:
    超硬核Java工程师秋招回忆录+面经汇总,为了拿BAT的研发offer我都做了那些准备?
    使用Prometheus监控Golang服务-基于YoyoGo框架
    Kubernetes Pod OOM 排查日记
    Golang语言排序的几种方式
    设计公共组件需要注意什么
    有关WebSocket必须了解的知识
    docker容器技术
    【SpringBoot】 中时间类型 序列化、反序列化、格式处理
    安装Scrapy的时候报错error: Microsoft Visual C++ 14.0 is required.
    python爬虫学习05-爬取图片
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366490.html
Copyright © 2020-2023  润新知