• UVa 11971


    链接:

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3122

    题意:

    有一根长度为n的木条,随机选k个位置把它们切成k+1段小木条。求这些小木条能组成一个多边形的概率。

    分析:

    不难发现本题的答案与n无关。在一条直线上切似乎难以处理,可以把直线接成一个圆,
    多切一下,即在圆上随机选k+1个点,把圆周切成k+1段。根据对称性,两个问题的答案相同。
    新问题就要容易处理得多了:“组不成多边形”的概率就是其中一个小木条至少跨越了半个圆周的概率。
    设这个最长的小木条从点i开始逆时针跨越了至少半个圆周,则其他所有点都在这半个圆周之外。
    除了点i之外其他每个点位于这半个圆周之外的概率均为1/2,因此总概率为1/(2^k)。
    点i的取法有k+1种,因此“组不成多边形”的概率为(k+1)/(2^k),能组成多边形的概率为1-((k+1)/(2^k))。

    代码:

     1 #include <cstdio>
     2 
     3 typedef long long int LLI;
     4 
     5 LLI gcd(LLI a, LLI b) {
     6     return b == 0 ? a : gcd(b, a%b);
     7 }
     8 
     9 int main() {
    10     int T, n, k;
    11     scanf("%d", &T);
    12     for(int cases = 1; cases <= T; cases++) {
    13         scanf("%d%d", &n, &k);
    14         LLI b = 1LL << k;
    15         LLI a = b - (k+1);
    16         printf("Case #%d: %lld/%lld
    ", cases, a/gcd(a,b), b/gcd(a,b));
    17     }
    18     return 0;
    19 }
  • 相关阅读:
    iframe
    go web
    go 算法与数据结构
    go redis
    go 网络编程
    go 并发编程
    go 序列化
    go 文件操作
    go 面向对象
    go 环境及4开发
  • 原文地址:https://www.cnblogs.com/hkxy125/p/9601833.html
Copyright © 2020-2023  润新知