2 条题解

  • 0
    @ 2025-10-8 17:08:27
    #include <bits/stdc++.h> 
    using namespace std; 
    typedef long long LL; 
    const LL P=5000011;
    LL fac[210000];
    LL qpow(LL a, LL b)  
    {
    	LL ans=1%P;a%=P;
    	for(;b;b>>=1)
    	{
    		if(b&1)ans=ans*a%P;
    		a=a*a%P;
    	}
    	return ans;
    }  
    LL C(LL n, LL m)  
    {
    	if(m>n)return 0;
    	return fac[n]*qpow(fac[m], P-2)%P*qpow(fac[n-m], P-2)%P;  
    }  
    LL lucas(LL n, LL m)  
    {
    	if(m==0)return 1;
    	else return C(n%P, m%P)*lucas(n/P, m/P)%P;  
    }  
    int main()  
    {
    	LL n, k;cin>>n>>k;
    	fac[0]=1;for(int i=1;i<=2*n;i++)fac[i]=fac[i-1]*i%P;
    	LL ans=1;
    	for(int i=1;i<=(n+k)/(k+1);i++)
    	{
    		ans=(ans+lucas(n-(i-1)*k, i))%P;
    	}
    	cout<<ans<<endl;
    	return 0;  
    }
    
    • 0
      @ 2025-10-8 17:08:21
      #include<bits/stdc++.h> 
      using namespace std; 
      typedef long long LL; 
      const LL P=5000011;
      LL fac[210000];
      LL qpow(LL a,LL b)  
      {
      	LL ans=1%P;a%=P;
      	for(;b;b>>=1)
      	{
      		if(b&1)ans=ans*a%P;
      		a=a*a%P;
      	}
      	return ans;
      }  
      LL C(LL n,LL m)  
      {
      	if(m>n)return 0;
      	return fac[n]*qpow(fac[m],P-2)%P*qpow(fac[n-m],P-2)%P;  
      }  
      LL lucas(LL n,LL m)  
      {
      	if(m==0)return 1;
      	else return C(n%P,m%P)*lucas(n/P,m/P)%P;  
      }  
      int main()  
      {
      	LL n,k;cin>>n>>k;
      	fac[0]=1;for(int i=1;i<=2*n;i++)fac[i]=fac[i-1]*i%P;
      	LL ans=1;
      	for(int i=1;i<=(n+k)/(k+1);i++)
      	{
      		ans=(ans+lucas(n-(i-1)*k,i))%P;
      	}
      	cout<<ans<<endl;
      	return 0;  
      }  
      • 1

      *【组合数:lucas定理】公牛和母牛[USACO09FEB] Bulls And Cows S

      信息

      ID
      5063
      时间
      1000ms
      内存
      128MiB
      难度
      7
      标签
      递交数
      62
      已通过
      16
      上传者