2019icpc沈阳网络赛
Posted pandaking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019icpc沈阳网络赛相关的知识,希望对你有一定的参考价值。
J题:
题意:给你一张大小为n的不确定的图,这个图不确定,每个点的入度和出度都为1。那么这样的图的一个特点就是肯定由若干个欧拉回路组成的。 可以得到递推公式就是n!
然后就再看它还有一个特点。要求每个点必须走不大于x条边能回到自身。。。。。。。 (n<=2*x<2e9)
我们肯定只能从反面想,把它不符合条件的都去除,因为(n<=2*x<2e9) 这个条件注定了可以这样想。。。。。。。
由于有 p(m)=c(m,n)*(m-1)!*(n-m)!/n!=1/m 所以对于每个的概率是1/i (x<i<=n)
预处理一下即可,下面是代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <bitset> 5 #include <iostream> 6 #include <algorithm> 7 typedef long long ll; 8 using namespace std; 9 const ll mod=(ll)(1e9+7); 10 const int maxn=(int)(1e6+10); 11 ll sum[maxn]; 12 int t; 13 ll x,n; 14 15 ll fast_pow(ll a,ll b) 16 ll res=1; 17 while(b) 18 if(b%2==1) res=(res*a)%mod; 19 a=(a*a)%mod; 20 b=b/2; 21 22 return res; 23 24 25 void init() 26 sum[0]=0; 27 for(ll i=1;i<maxn;i++) 28 sum[i]=(sum[i-1]+fast_pow(i,mod-2))%mod; 29 30 31 32 33 34 int main() 35 init(); 36 scanf("%d",&t); 37 while(t--) 38 scanf("%lld%lld",&n,&x); 39 if(x>=n) 40 printf("1\n"); 41 continue; 42 else 43 ll ans1=1,ans2=1; 44 for(ll i=x+1;i<=n;i++) ans1=(ans1*i)%mod; 45 ans2=(ans1-(ans1*(sum[n]-sum[x]+2*mod))%mod+2*mod)%mod; 46 //cout<<ans1<<" "<<ans2<<endl; 47 printf("%lld\n",ans2*fast_pow(ans1,mod-2)%mod); 48 49 50 return 0; 51
以上是关于2019icpc沈阳网络赛的主要内容,如果未能解决你的问题,请参考以下文章
2019ICPC沈阳网络赛-D-Fish eating fruit(树上DP, 换根, 点分治)
2019ACM-ICPC沈阳网络赛-C-Dawn-K's water(完全背包模板题)