zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366490.html
Copyright © 2011-2022 走看看