由于个人能力有限,只能AC第一题,故现放第一题的题解
正如钟皓曦所说:组合数问题都是好题
直接运用排列组合的知识
有n-m个不放的
所以有n-m+1个空可以去插花
所以是Cn-m+1m
又因为花的序号不同所以答案为
Cn-m+1mxAmm
经过化简
【(n-m+1)!/(m!*(n-2m+1)!】*m!
即
(n-2m+2)*(n-2m+3)*.....*(n-m+1)
还有就是别忘记取模
Code:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<iomanip> #include<string> #include<algorithm> #include<cstdlib> #include<queue> #include<stack> using namespace std; inline long long read() { long long X=0,w=1; char c=getchar(); while(c<'0'||c>'9') { if (c=='-') { w=-1; } c=getchar(); } while(c>='0'&&c<='9') { X=(X<<3)+(X<<1)+c-'0'; c=getchar(); } return X*w; } long long type,n,m,p,ans=1; int main() { freopen("ilove.in","r",stdin); freopen("ilove.out","w",stdout); type=read();n=read();m=read();p=read(); for(int i=n-2*m+2;i<=n-m+1;i++) { ans=ans*i%p; } printf("%lld",ans); return 0; }