日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj 2142 礼物

發(fā)布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj 2142 礼物 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目大意:

$n$件禮物,送給$m$個人,其中送給第$i$個人禮物數(shù)量為$w_i$,求送禮物的方案數(shù)

思路:

顯然答案為$\binom{n}{w_1} \binom{n-w_1}{w_2} \cdots \binom{n-w_1 ... w_{m-1}}{w_m}$

化簡得到$\frac{n!}{w_1 ! w_2 ! \cdots w_m! (n-sum)!}$

然后擴展盧卡斯即可

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cmath> 6 #include<algorithm> 7 #include<queue> 8 #include<vector> 9 #include<map> 10 #include<set> 11 #define ll long long 12 #define db double 13 #define inf 2139062143 14 #define MAXN 400100 15 #define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i) 16 #define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i) 17 #define ren for(register int i=fst[x];i;i=nxt[i]) 18 #define pb(i,x) vec[i].push_back(x) 19 #define pls(a,b) ((a+b)%MOD+MOD)%MOD 20 #define mns(a,b) ((a%MOD-(b)%MOD)%MOD+MOD)%MOD 21 #define mul(a,b) (1LL*(a)*(b))%MOD 22 using namespace std; 23 inline int read() 24 { 25 int x=0,f=1;char ch=getchar(); 26 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();} 27 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} 28 return x*f; 29 } 30 int n,m,a[10],ans,MOD; 31 int exgcd(int a,int b,int &x,int &y) 32 { 33 if(!b) {x=1,y=0;return a;} 34 int d=exgcd(b,a%b,y,x);y-=(a/b)*x;return d; 35 } 36 int q_pow(int bas,int t,int p,int res=1) 37 { 38 for(;t;t>>=1,bas=(1LL*bas*bas)%p) if(t&1) res=(1LL*res*bas)%p;return res; 39 } 40 int inv(int n,int p){int x,y;exgcd(n,p,x,y);return (x+p)%p;} 41 int fac(int n,int p,int pk) 42 { 43 if(!n) return 1;int res=1; 44 rep(i,2,pk) if(i%p) res=(1LL*res*i)%pk;res=q_pow(res,n/pk,pk); 45 rep(i,2,n%pk) if(i%p) res=(1LL*res*i)%pk;return (1LL*res*fac(n/p,p,pk))%pk; 46 } 47 int work(int p,int pk) 48 { 49 int res=fac(n,p,pk),s=0;for(int i=n;i;i/=p) s+=i/p; 50 rep(i,1,m) {for(int j=a[i];j;j/=p) s-=j/p;res=mul(res,inv(fac(a[i],p,pk),pk));} 51 return mul(q_pow(p,s,pk),res); 52 } 53 void exlucas() 54 { 55 int rst=MOD,pk;rep(i,2,sqrt(MOD)) if(rst%i==0) 56 { 57 pk=1;while(rst%i==0) rst/=i,pk*=i; 58 ans=pls(mul(mul(work(i,pk),inv(MOD/pk,pk)),MOD/pk),ans); 59 } 60 if(rst!=1) ans=pls(mul(mul(work(rst,rst),inv(MOD/rst,rst)),MOD/rst),ans); 61 printf("%d\n",ans); 62 } 63 int main() 64 { 65 MOD=read();n=read(),m=read();int s=0;rep(i,1,m) a[i]=read(),s+=a[i]; 66 if(s>n)puts("Impossible");else {if(n-s) a[++m]=n-s;exlucas();} 67 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/yyc-jack-0920/p/10656378.html

總結(jié)

以上是生活随笔為你收集整理的bzoj 2142 礼物的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。