hdu 6114 Chess

来源:互联网 发布:张子枫清华附中知乎 编辑:程序博客网 时间:2024/06/08 07:03

这个题很容易看出规律,就是求c(n,m),if(n<m)swap(n,m)

用的模板

#include<algorithm>#include <iostream>#include <stdlib.h>#include <string.h>#include  <stdio.h>#include   <math.h>#include   <time.h>#include   <vector>#include   <bitset>#include    <queue>#include      <set>#include      <map>using namespace std;long long p,m,n;long long Pow(long long a,long long b) {long long ans=1;while(b) {if(b&1) {b--;ans=(ans*a)%p;} else {b/=2;a=(a*a)%p;}}return ans;}long long C(long long n,long long m) {if(n<m)return 0;long long ans=1;for(int i=1; i<=m; i++) {ans=ans*(((n-m+i)%p)*Pow(i,p-2)%p)%p;}return ans;}long long Lucas(long long n,long long m) {if(m==0)return 1;return Lucas(n/p,m/p)*C(n%p,m%p)%p;}int main(){    int t;    p=1000000000+7;    scanf("%d",&t);    while(t--)    {        int n,m;        scanf("%d%d",&n,&m);        if(n>m)        {            int t;            t=n;            n=m;            m=t;        }        cout<<Lucas(m,n)<<endl;    }    return 0;}