zoukankan      html  css  js  c++  java
  • [CF850F] Rainbow Balls

    题目大意

    这里

    题解

    我们枚举最后剩下的球的种类,那么其他球可以看做没用了。
    设选定的球有(a_i)个,球的总数为(s=sum_{i=1}^n a_i)
    现在问题变为:在一个长度为(s)的数轴上,初始在(a_i),问在不到达(0)的前提下到达(s)的期望步数。
    (p_i)表示在(i)点,向前/后移动一步的概率,有:(p_i = frac{i(s-i)}{s(s-1)})
    可以列出一个比较显然的式子:

    [f_i = (1-2p_i) f_i + p_i f_{i-1} + p_i f_{i+1} + step_i ]

    注意(step_i = frac{i}{s}),为什么?
    感性理解一下。
    想象你有一张很大的图,有一些节点是终止节点。
    现在你要从当前节点向某个后继节点走一步,要算到达任意一个终止节点的期望步数。
    由于我们现在选定了一个终止节点。
    那么假设走到了(0)号点,就相当于走到了去往另一个终止节点的路径。
    不妨把这"1"步拆分成若干份,这若干份的和为(1),分开计算。
    由于走到(0)就会走到另一条路径上去,所以每一份不妨设为不走到其它路径上的概率。
    所以(step_i)为从(i)点出发,不走到(0)的条件下走到(s)的概率。
    这是一个经典问题了,很容易得到(step_i = frac{i}{s})
    树上高消肯定是可以的,然而需要求逆复杂度为(O((sum a)logn))无法通过此题。
    所以我们需要进一步深入。
    带入(step_i = frac{i}{s}),稍微变换后有:

    [f_i - f_{i+1} = (f_{i-1}-f_i) +frac{s-1}{s-i} ]

    所以可以得到:(f_{i}-f_{i+1} = (f_1-f_2) + sum_{j=2}^{i}frac{s-1}{s-j})
    那么有:

    [f_1 = sum_{i=1}^{s-1} (f_i - f_{i+1}) = (s-1)(f_1-f_2)+sum_{i=2}^{s-1}sum_{j=2}^{i} frac{s-1}{s-j} ]

    (sum_{i=2}^{s-1}sum_{j=2}^{i} frac{s-1}{s-j} = sum_{i=2}^{s-1} (s-i) frac{s-1}{s-i} =(s-2)(s-1))
    所以(f_1 = (s-1)(f_1-f_2) + (s-2)(s-1))
    而由于(f_0)属于另一条路径,即不存在,故(f_1 = (1-2p)f_1 +pf_2 + frac{1}{s})
    化简有:(2f_1 = f_2 + 1),所以(f_1 - f_2 = 1 - f_1)
    所以有:

    [f_1 = (s-1)(1-f_1) +(s-2)(s-1) ]

    解得(f_1 = frac{(s-1)^2}{s}),即(f_1-f_2 = 1-frac{(s-1)^2}{s})
    而我们知道(f_{i}-f_{i+1})(f_{i-1}-f_i)之间的关系,所顺次推出所有(f_i)即可。
    答案(ans = sum_{i=1}^n f_{a_i}),复杂度(O(max(a)logn))

  • 相关阅读:
    TcxComboBoxProperties下拉框填充
    Delphi用QJSON解析JSON格式的数据 【转】
    Delphi的idhttp报IOHandler value is not valid错误的原因[转]
    RelayCommand
    ViewModelBase && ObservableObject
    MvvmLight ToolKit 教程
    WPF中的数据验证
    MvvmLight ToolKit .Net4.5版本 CanExecute不能刷新界面bug
    微软虚拟学院MVA 字幕获取方法
    WPF Binding INotifyPropertyChanged 多线程 深入理解
  • 原文地址:https://www.cnblogs.com/GuessYCB/p/10228339.html
Copyright © 2011-2022 走看看