2016多校训练Contest6: 1001 A Boring Question hdu5793

来源:互联网 发布:淘宝联盟一淘同时使用 编辑:程序博客网 时间:2024/05/20 17:26


Problem Description
There are an equation.
0k1,k2,kmn1j<m(kj+1kj)%1000000007=?
We define that (kj+1kj)=kj+1!kj!(kj+1kj)! . And (kj+1kj)=0 while kj+1<kj.
You have to get the answer for each n and m that given to you.
For example,if n=1,m=3,
When k1=0,k2=0,k3=0,(k2k1)(k3k2)=1;
Whenk1=0,k2=1,k3=0,(k2k1)(k3k2)=0;
Whenk1=1,k2=0,k3=0,(k2k1)(k3k2)=0;
Whenk1=1,k2=1,k3=0,(k2k1)(k3k2)=0;
Whenk1=0,k2=0,k3=1,(k2k1)(k3k2)=1;
Whenk1=0,k2=1,k3=1,(k2k1)(k3k2)=1;
Whenk1=1,k2=0,k3=1,(k2k1)(k3k2)=0;
Whenk1=1,k2=1,k3=1,(k2k1)(k3k2)=1.
So the answer is 4.
 

Input
The first line of the input contains the only integer T,(1T10000)
Then T lines follow,the i-th line contains two integers n,m,(0n109,2m109)
 

Output
For each n and m,output the answer in a single line.
 

Sample Input
21 22 3
 

Sample Output
313

直接搬运原题的题解了。。


以上。。似乎第三步和第四步是一样的

倒数第二步用二项式定理就可以推出来了

#include<map>#include<cmath>#include<queue>#include<vector>#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<algorithm>using namespace std;long long mod=1000000007;inline long long power(long long x,int y){long long xt=1;while(y!=0){if(y%2==1)xt=xt*x%mod;x=x*x%mod;y/=2;}return xt;}int main(){int T;scanf("%d",&T);while(T>0){T--;int n,m;scanf("%d%d",&n,&m);printf("%I64d\n",(power(m,n+1)+mod-(long long)1)*power(m-1,mod-2)%mod);}return 0;}


0 0
原创粉丝点击