zoukankan      html  css  js  c++  java
  • CF1139D Steps to One

    时隔好久终于做掉了这道题

    首先我们对于这种问题用常用套路分析(经典轮次期望转化套路):

    [E(X)=sum _{ige 1} P(Xge i) ]

    这就意味着我只要求长度大于等于(i)时的概率,而这个概率显然可以转化成长度为(i-1)(gcd e 1)的概率

    考虑总方案数是(m^{i-1})容易得到,因此我们只需要求出长度为(i-1)(gcd= 1)的方案数即可

    考虑使用容斥,我们枚举(gcd=j),然后真正的(gcd|j)的情况都会被计算,因此方案数是(lfloor frac{m}{j} floor ^{i-1})

    然后容斥系数是什么呢,这里很显然就是莫比乌斯函数

    那么现在的式子就是:

    [1+sum_{ige 2} frac{m^{i-1}-sum_{j=1}^m mu(j)lfloorfrac{m}{j} floor^{i-1}}{m^{i-1}}\ 1+sum_{ige 1} frac{m^{i}-sum_{j=1}^m mu(j)lfloorfrac{m}{j} floor^{i}}{m^{i}}\ ]

    (j=1)(mu(j)lfloorfrac{m}{j} floor^{i}=m^i)可以单独提出来和前面的消掉,因此现在式子:

    [1-sum_{ige 1} frac{sum_{j=2}^m mu(j)lfloorfrac{m}{j} floor^{i}}{m^i}\ 1-sum_{j=2}^m mu(j)sum_{ige 1} (frac{lfloorfrac{m}{j} floor}{m})^i ]

    后面的(frac{lfloorfrac{m}{j} floor}{m})显然是小于(1)的,直接套等比数列求和公式就有:

    [1-sum_{j=2}^m mu(j)frac{frac{lfloorfrac{m}{j} floor}{m}}{1-frac{lfloorfrac{m}{j} floor}{m}}\ 1-sum_{j=2}^m mu(j)frac{lfloorfrac{m}{j} floor}{m-lfloorfrac{m}{j} floor} ]

    然后就可以直接(O(nlog n))做了

    Upt:可以通过度教筛可以做到(O(n^{frac{2}{3}}+sqrt n imes log n)),可以出一个略加强的版本

    #include<cstdio>
    #define RI register int
    #define CI const int&
    using namespace std;
    const int N=100005,mod=1e9+7;
    int m,prime[N],mu[N],cnt,ans; bool vis[N];
    inline int quick_pow(int x,int p=mod-2,int mul=1)
    {
    	for (;p;p>>=1,x=1LL*x*x%mod) if (p&1) mul=1LL*mul*x%mod; return mul;
    }
    #define P(x) prime[x]
    inline void init(CI n)
    {
    	RI i,j; for (vis[1]=1,i=2;i<=n;++i)
    	{
    		if (!vis[i]) prime[++cnt]=i,mu[i]=-1;
    		for (j=1;j<=cnt&&i*P(j)<=n;++j)
    		{
    			vis[i*P(j)]=1; if (i%P(j)) mu[i*P(j)]=-mu[i]; else break;
    		}
    	}
    }
    #undef P
    int main()
    {
    	RI i; for (scanf("%d",&m),init(m),ans=1,i=2;i<=m;++i)
    	ans=(1LL*ans-(1LL*mu[i]*(m/i)*quick_pow(m-(m/i))%mod+mod)%mod+mod)%mod;
    	return printf("%d",ans),0;
    }
    
  • 相关阅读:
    Javascript知识汇总------手写图片上传插件
    Javascript知识汇总------面向对象手写弹窗插件
    Javascript知识汇总------面向对象手写拖拽插件
    Javascript知识汇总------获取构造函数constructor名称和一些字符串处理方法
    博客搬家啦
    NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树
    BZOJ 1044 木棍分割 解题报告(二分+DP)
    BZOJ 1051 最受欢迎的牛 解题报告
    BZOJ 2467 解题报告
    BZOJ 4619 Swap Space 解题报告
  • 原文地址:https://www.cnblogs.com/cjjsb/p/13610731.html
Copyright © 2011-2022 走看看