zoukankan      html  css  js  c++  java
  • 桶中取黑白球问题

    桶中有n个黑球,n个白球,取球规则如下:每次从桶中取两个球,如果两球同色,则放回一个黑球,否则放回一个白球。

    问:最后桶中剩下一个黑球的概率是多大?

    分析取球的规则,每次取完球之后,黑球的数量要么增1,要么减1,白球的数量要么不变,要么减2。

    如果说桶中只剩下一个球,鉴于白球的递减是以2为倍数,所以,当n为奇数时,桶中剩下的一定是白球,当n为偶数时,桶中剩下的一定是黑球。

    编程之美中,作者提出了用异或的数学逻辑来模拟取球的过程,黑球看作是0,白球看作是1,这样的话,取球规则就相当于把取出的数字异或之后再把结果丢回去。

    0 XOR 0 =0

    1 XOR 1 =0

    0 XOR 1 =1

    这样以来,每次取完数字之后,所有数字的异或的结果是不变的,要么是0,要么是1。当1的个数为奇数时,奇数个1的异或结果是1,偶数个1的异或结果为0,0的个数不影响异或结果。

    所以,把1和白球对应起来,得出的结论是当有奇数个白球时,桶中剩下的一个一定是白球,当白球的个数为偶数时,桶中剩下的一个一定是黑球。

    note:编程之美中的问题中给出的n为100,我们很容易就从100个黑白球从头开始分析,想着怎么样模拟取球的过程,能够递归到桶中只剩一个黑球的情形,然后陷入到复杂的穷举当中去,

    我刚开始就是这么干的,搞了一个下午,还写了个程序去跑,结果是程序没跑出结果来,原因是穷举的规模太大了,当n为100的时候,穷举的规模大概为3199

    so,一开始就应该有个正确的思路,考虑穷举是不可行的,应该从取球的规则中挖掘规律,原来,就这么简单,吼啊x。

  • 相关阅读:
    多项式乘法
    容斥计算多重组合
    D. Tokitsukaze, CSL and Stone Game
    优惠买商品(dp、greedy)
    数星星(单点更新,求前缀和)
    信息推送(单点更新,求前缀和)
    互相送礼物
    Codeforces Round #611 (Div. 3)E. New Year Parties
    多源bfs
    mysql事务和锁
  • 原文地址:https://www.cnblogs.com/un4sure/p/2384265.html
Copyright © 2011-2022 走看看