多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > hdu 5894 分位置(組合數學,沈陽網絡賽)

hdu 5894 分位置(組合數學,沈陽網絡賽)

來源:程序員人生   發布時間:2016-11-03 08:37:39 閱讀次數:2419次

題目:http://acm.hdu.edu.cn/showproblem.php?pid=5894
題意:

現在 m個考生人需要坐在有n個坐位的圓桌上。你需要安排位置,使得任意兩個考生之間相距最少k個位置。桌子有編號,考生a和b交換位置視作1種方案,問有多少方案,mod 1e9+7。(0 < m < n < 1e6, 0 < k < 1000)

分析:

這題隊友過的,補1下~
首先肯定第1個人的位置,第1個人可以從n個椅子中任選1個,然后剩余n⑴個椅子。由于人的間隔最少k個椅子,所以從這些符合要求的間隔距離的椅子抽出k*m個,然后剩下的m⑴個人就能夠隨意從剩下的椅子人選了。可以想象成每一個人和k個坐位綁在1起,1旦這個人有了坐位,他后面自動添加這k個坐位。
那末第1個人從n個坐位當選擇1個,并且抽走了k*m個,那末剩下n⑴-k*m個坐位,在這當中選m⑴個作為給其余人座,總數為sum=n*C(n⑴-k*m,m⑴),由于這里的人是無差別的。比如有3個人,假定他們坐的位置是(2,4,7),那末,(4,2,7),(7,2,4)是重復計算的,所有sum/m。

代碼:

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e9+7; ll qmod(ll x,int n) { ll ans=1; for(; n; n>>=1) { if(n&1)ans=ans*x%mod; x=x*x%mod; } return ans; } ll C(int n,int m) { if(m>n)return 0; ll ans=1; for(int i=1; i<=m; i++) { ans=ans*((n+i-m)*qmod(i,mod-2)%mod)%mod; } return ans; } int main() { // freopen("f.txt","r",stdin); int T; scanf("%d",&T); ll n,m,k; while(T--) { scanf("%lld%lld%lld",&n,&m,&k); if(m==1)printf("%lld\n",n); else printf("%lld\n",(C(n-k*m-1,m-1)*n%mod)*qmod(m,mod-2)%mod); } return 0; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本jizz在线播放 | 99热精品成人免费观看 | 五月亚洲| 免费一级在线观看 | 国产成在线观看免费视频成本人 | 国产成人综合久久精品亚洲 | 亚洲人成亚洲精品 | 国产精品免费大片一区二区 | 特级淫片国产免费高清视频 | 欧美xxxxx性开放 | 亚洲国产精品综合久久一线 | 在线观看中文字幕第一页 | 亚洲精品99久久久久久 | 久草在线观看首页 | 最新欧美精品一区二区三区 | 欧美三级免费观看 | 999精品久久久中文字幕蜜桃 | 一区二区三区观看 | 综合九九 | 欧美激情久久久久久久大片 | 国产农村一一级特黄毛片 | 亚洲欧洲国产视频 | 日本一区二区三区不卡在线视频 | 国产美女一区精品福利视频 | 国产精品欧美一区二区在线看 | 亚色污| 久久伊人亚洲 | 亚洲成人免费在线视频 | 免费一级a毛片 | 国产成人福利美女观看视频 | 亚洲第一色区 | 色费女人18毛片a级视频在线 | 亚洲天堂精品在线 | 国产日韩欧美一区 | 日韩中文字幕一区二区不卡 | 亚洲第一网站免费视频 | 国产综合久久久久 | 久久亚洲一区二区 | 亚洲国产成人精品一区91 | 亚洲视频一区二区三区 | 欧美日韩一区二区三区视视频 |