51nod 1829 函数
Posted bobhuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1829 函数相关的知识,希望对你有一定的参考价值。
想知道f:A->B这个函数(其中|A|=n, |B|=m)的所有映射关系要使B的每个元素都要被A的一个元素覆盖到。
数字可能很大你只要输出方案数模1,000,000,007即可。
Input
一共一行两个数,n和m。(1<=n,m<=1,000,000)
Output
一共一行包含一个方案数。
Input示例
2 2
Output示例
2
话说这个题当时并没有想明白怎么去做
给定n个有区别的小球,装到m个有区别的箱子里,且没有箱子是空的,求方案数
所以就是C(m,0)*m^n-C(m,1)*(m-1)^n+...-...
#include<bits/stdc++.h> using namespace std; #include<bits/stdc++.h> using namespace std; const int MD=1e9+7,N=2e6+5; int f[N],v[N]; int C(int n,int m) { if(m<0||m>n) return 0; return 1LL*f[n]*v[m]%MD*v[n-m]%MD; } int la(int a,int x) { int ans=1; for(;x;a=a*1LL*a%MD,x>>=1)if(x&1)ans=ans*1LL*a%MD; return ans; } int main() { f[0]=1; for (int i=1; i<N; i++) f[i]=1LL*f[i-1]*i%MD; v[N-1]=la(f[N-1],MD-2); for(int i=N-2; i>=0; i--) v[i]=v[i+1]*(i+1LL)%MD; int ans=0,n,m,t=-1; cin>>n>>m; for(int i=0;i<=m;i++)t=-t,ans=(t*C(m,i)*1LL*la(m-i,n)%MD+ans)%MD; cout<<(ans+MD)%MD; return 0; }
以上是关于51nod 1829 函数的主要内容,如果未能解决你的问题,请参考以下文章