田园的饭可好吃了
題目來(lái)源
中北大學(xué)2018年新生賽
題目描述
田園餐廳有一個(gè)能放下m個(gè)人的圓桌。
那是去年的一個(gè)雨天,他和n - 1個(gè)學(xué)弟,在田園餐廳買(mǎi)飯,并且他們占下了那個(gè)圓桌。
問(wèn)圓桌的座位有多少種坐法,當(dāng)然不一定全部的人都能坐到圓桌上。
n >= m
輸入描述
每行,一個(gè)數(shù)n,一個(gè)數(shù)m
若n =m = -1則輸出'EndOfSolution'并退出程序
否則,保證m,n∈{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
n >= m
輸出描述
每行一個(gè)整數(shù)表示方案數(shù)
樣例輸入
1 1
2 1
3 1
4 1
20 2
-1 -1
樣例輸出
1
2
3
4
EndOfSolution
題解:
從n個(gè)人里邊取出m個(gè)人,總共有 ?C種,然后考慮排列,m個(gè)人全排列有m!種情況,但是飯桌是個(gè)圓的,每種排列經(jīng)過(guò)旋轉(zhuǎn)后總共有m種,也就是每種情況算了m次,所以排列的種類(lèi)總共有m!/m種,也就是(m-1)!,最終答案就是??C*(m-1)! 。最后輸出“EndOfSolution”不要輸回車(chē)符。
代碼
#include<algorithm> #include <iostream> #include<cstring> #include <cstdio> using namespace std; typedef long long ll; const int maxn=1e5+10; ll n,m; ll f(ll x){if(x==0||x==1) return 1;ll ans=1;for(ll i=2;i<=x;i++){ans*=i;}return ans; } int main(){while(scanf("%lld%lld",&n,&m)){if(n==-1&&m==-1){printf("EndOfSolution");break;}ll ans=f(n)/f(m)/f(n-m)*f(m-1);cout<<ans<<endl;}return 0; }?
總結(jié)
- 上一篇: STM32F103ZE TFT液晶代码移
- 下一篇: 女性如何理解男人的性需求? 男性的性表达