• Problem. J


    题意简述:

    (n)个正整数(a_i),先手后手轮流选出一个数,当选出来的所有的数的(gcd)(1)时最后一个行动的人失败。
    如果两个人都随机选择一个未被选的数,那么先手获胜的概率是多少?

    数据范围:

    (nle10^5,a_ile10^9)

    解法:

    (q_i)表示选了(i)个数后结束游戏的概率。
    注意到先手获胜当且仅当选了偶数个数且游戏结束,因此答案为(sumlimits_{i=1}^{lfloorfrac n2 floor}q_{2i})
    考虑容斥转化,设(p_i)表示选了(i)个数后仍未结束游戏的概率,那么(q_i=p_{i-1}-p_i)
    (g_{i,d})表示选出(i)个数且(gcd)(d)的概率,那么(p_i=sumlimits_{d=2}^{+infty}g_{i,d})
    继续容斥转化,设(f_{i,d})表示选出(i)个数,且选的数都是(j)的倍数的概率,那么(f_{i,d}={cnt_dchoose i}frac{i!}{n^{underline i}})
    其中(cnt_i=sumlimits_{j=1}^n[i|a_j]),可以(O(n))求出(t_i=sumlimits_{j=1}^n[a_j=i])(O(nlog n))求出。
    不难发现(f_{i,d}=sumlimits_{d|t}g_{i,t}),根据Mobiüs反演(g_{i,d}=sumlimits_{d|t}f_{i,t}mu(frac td))
    那么(p_i=sumlimits_{d=2}^{+infty}g_{i,d}=sumlimits_{d=2}^{+infty}sumlimits_{d|t}f_{i,t}mu(frac td)=sumlimits_{t=2}^{+infty}f_{i,t}sumlimits_{d|t}[d e 1]mu(frac td)=sumlimits_{t=2}^{+infty}f_{i,t}(epsilon(t)-mu(t))=-sumlimits_{t=2}^{+infty}f_{i,t}mu(t))
    注意到(f_{i,d} e 0Leftrightarrow iin[1,cnt_d]),因此计算(f,p)的时间复杂度都是(O(sumlimits_{i=2}^ncnt_i)=O(sumlimits_{i=1}^nsigma_0(a_i))=O(nsigma_0(max(a))))
    还有线性筛(mu)的时间为(O(max(a)))
    总的时间复杂度为(O(n(log n+sigma_0(max(a)))+max(a)))

  • 相关阅读:
    ConcurrentHashMap的初步使用场景、源码分析讲解(中)
    ConcurrentHashMap的初步使用场景、源码分析讲解(上)
    CyclicBarrier用例、源码分析讲解
    Semaphore用例、源码分析讲解
    CountDownLatch用例、源码分析讲解
    Condition用例、源码分析详解(下)
    Condition用例、源码分析详解(上)
    图解数据结构之数组、链表、栈、队列
    Python--day27--复习
    Python--day26--反射
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12756198.html
Copyright © 2020-2023  润新知