• 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;
    }
    
  • 相关阅读:
    javascript异步编程系列【十】—Jscex+Easeljs制作坦克大战
    博客园分页JQuery打造的分页无刷新的Repeater
    参赛作品
    摄像机、投影、3D旋转、缩放
    javascript异步编程系列【八】Jscex版火拼俄罗斯
    javascript异步编程系列【七】扫盲,我们为什么要用Jscex
    javascript异步编程系列【五】Jscex制作愤怒的小鸟
    javascript异步编程系列【六】Jscex版愤怒的小鸟之冲锋陷阵鸟
    每周优秀代码赏析—Jscex内核【一】
    javascript异步编程系列【一】用Jscex画圆
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366490.html
Copyright © 2020-2023  润新知