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 函数的主要内容,如果未能解决你的问题,请参考以下文章

51Nod 1244 莫比乌斯函数之和

51 Nod 1244 莫比乌斯函数前n项和

51nod 1240 莫比乌斯函数

莫比乌斯函数之和 51Nod - 1244 (杜教筛)

欧拉函数之和 51Nod - 1239

51nod-1239&1244欧拉函数之和&莫比乌斯函数之和 杜教筛