牛客提高D6t3 分班问题

分析

就就就是推柿子

看官方题解吧/px

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
const int mod = 19260817;
int n,m,t,Ans,p[mod+5],inv[mod+5];
inline int pw(int x,int p){
    int res=1;
    while(p){
      if(p&1)res=res*x%mod;
      x=x*x%mod;
      p>>=1;
    }
    return res;
}
inline void init(){
    int i,j,k;
    p[0]=1;
    for(i=1;i<mod;i++)p[i]=p[i-1]*i%mod;
    inv[mod-1]=pw(p[mod-1],mod-2);
    for(i=mod-2;i>=0;i--)inv[i]=inv[i+1]*(i+1)%mod;
    return;
}
inline int c(int n,int m){
    if(n<m)return 0;
    return p[n]*inv[m]%mod*inv[n-m]%mod;
}
inline int lus(int n,int m){
    if(n<mod&&m<mod)return c(n,m);
    return c(n%mod,m%mod)*lus(n/mod,m/mod)%mod;
}
signed main(){
    int i,j,k;
    scanf("%lld",&t);
    init();
    while(t--){
      scanf("%lld%lld",&n,&m);
      Ans=2ll*m%mod*lus(n+m-1,n-1)%mod;
      printf("%lld\n",Ans);
    }
    return 0;
}
posted @ 2019-08-26 16:39  水题收割者  阅读(218)  评论(0编辑  收藏  举报