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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P5520 [yLOI2019] 青原樱(排列组合)

發布時間:2024/1/8 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P5520 [yLOI2019] 青原樱(排列组合) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

P5520 [yLOI2019] 青原櫻

我又來頹文化啦!

題目描述

n n n個空位中選擇一些空位種 m m m櫻花,要求每兩棵櫻花之間至少要有一個空位.

求合法種植數.

題目分析

題解本家

這不是五三水題嘛。。。

首先,看到這種“一個空位”的問題,第一想法就是把一棵櫻花和它后面的空位視為一組(或者一個數).

另外我們可以發現,如果最后一個元素在n位置上時,那么是不用考慮它后面的那個空位的.

所以思路就出來了:分類討論.

第一,如果最后一個元素不在 n n n位置上,那么此時相當于有 n ? m n-m n?m個空位,要插入 m m m個元素,再加上這 m m m個元素自身的排列,總共有 A m m C n ? m m A_{m}^{m}C_{n-m}^{m} Amm?Cn?mm?種合法方案.

第二,如果最后一個元素在 n n n位置上,那么此時相當于有 ( n ? 1 ) ? ( m ? 1 ) = n ? m (n-1)-(m-1)=n-m (n?1)?(m?1)=n?m個空位,要插入 m ? 1 m-1 m?1個元素,同樣加上他們自身的排列,總共有 A m m C n ? m m ? 1 A_{m}^{m}C_{n-m}^{m-1} Amm?Cn?mm?1?種方案.

另外, A m m C n ? m m ? 1 = m ? A n ? m m ? 1 A_{m}^{m}C_{n-m}^{m-1}=m*A_{n-m}^{m-1} Amm?Cn?mm?1?=m?An?mm?1? A m m C n ? m m = A n ? m m A_{m}^{m}C_{n-m}^{m}=A_{n-m}^{m} Amm?Cn?mm?=An?mm?,我們直接處理排列數即可.

求和,而我們知道 A x y + y ? A x y ? 1 = A x + 1 y A_{x}^{y}+y*A_{x}^{y-1}=A_{x+1}^{y} Axy?+y?Axy?1?=Ax+1y?,這樣就可以一遍用 O ( n ) O(n) O(n)求得最后的值.

問我算法?不就是某位老師在視頻里說的嗎?從中間某位開始算啊!

#include<bits/stdc++.h> #define ll long long//防止計算時溢出 using namespace std; ll type,n,m,mod,ans=1; int main(){scanf("%lld%lld%lld%lld",&type,&n,&m,&mod);for(ll i=n-2*m+2;i<=n-m+1;i++){ans=(ans*i)%mod;}printf("%lld\n",ans);return 0; }

題后反思

盡量把組合數化簡到最簡的形式,最好是一遍 O ( n ) O(n) O(n)就可以算出來的一維組合數/排列數形式.

注意利用各個公式進行靈活的轉換.

總結

以上是生活随笔為你收集整理的P5520 [yLOI2019] 青原樱(排列组合)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。