【洛谷 P5520】[yLOI2019] 青原樱 【组合数学】

[yLOI2019] 青原樱 【洛谷 P5520】

好喜欢 《青原樱》这首歌, 带我入坑银临古风的 歌。

%%% 一扶苏一 dalao

星川之下皆萤火尘埃,
我独行在人潮你天真而待。
相遇若是借丹青着色,
青原上
绯樱如海。

晴昼秋岚皆入我襟怀,
只岁暮天寒独对江心月白。
谢此际春风带我慷慨,
回眸处
一川青黛。
——《青原樱》

题目大意:

你有 m m m 朵花,有 n n n 个花盆,每朵花不能种在相邻的花盆中,每朵花都不一样 ,问你有多少种种植方案?

思路:

m m m 朵花, m − 1 m-1 m1 个空花盆,我们把 m − 1 m-1 m1 抽出来扔掉,剩下的花不是随便种吗?
因为每一朵花都不一样,所以放的顺序不同会导致答案不同,那么我们用到的不是组合,而是排列。
答案就是 A n − ( m − 1 ) m = A n − m + 1 m = ( n − m + 1 ) ∗ ( n − m ) ∗ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ∗ ( n − 2 m + 3 ) ∗ ( n − 2 m + 2 ) A_{n-(m-1)}^{m}=A_{n-m+1}^{m}=(n-m+1)*(n-m)*······*(n-2m+3)*(n-2m+2) An(m1)m=Anm+1m=(nm+1)(nm)(n2m+3)(n2m+2)
时间复杂度 O ( m ) O(m) O(m)

代码:

#include
#include
#include
#include
#include
#include
#include
#define r register
#define rep(i,x,y) for(r ll i=x;i<=y;++i)
#define per(i,x,y) for(r ll i=x;i>=y;--i)
using namespace std;
typedef long long ll;
const ll V=1e5+10;
ll opt,n,m,ans,p; 
inline ll in()
{ll res=0,f=1;char ch;while((ch=getchar())<'0'||ch>'9')if(ch=='-') f=-1;res=res*10+ch-48;while((ch=getchar())>='0'&&ch<='9')res=res*10+ch-48;return res*f;
}
int main()
{opt=in();n=in(),m=in(),p=in();ans=1;ll x=n-m+1;rep(i,1,m){ans=(ans*x)%p;--x;}printf("%lld",ans); return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部