今天的題怎麼都這麼難,不是搞常數就是勁邏輯
沒想到組合數學學的這麼差、連插板法都沒有看出來、、
首先兩個兩個分組(分組的思想很重要)
然後本質不同就利用上了,即選的組數量不同
然後就是列舉所有m,然後用組合數往裡填,即把除去m個數之外的空間/2來放其他組
從1做到(n+m)/2的話乙個組合數就搞定了
對於奇偶就只需在最後新增乙個小的就可以保證不重不漏(遞推可證)
然而一開始做的時候連式子都列不出來,最後離散選擇變成幾次方的形式,就直接錯了(重複)
所以無論如何應該先把式子列出來,然後再看一看有沒有可以化簡的地方
注意組合數有時有很巧妙的化簡套路(如字首和直接變成乙個組合數)
6個月前做過這個題,然後就懷疑人生,就再也不想碰數學了
碼(借(chao)鑑(de)):
#include#include#define ll long long
using namespace std;
#define p 1000000007
int n,m,f[2000005],ni[2000005],i,ans;
int c(int x,int y)
int main()
for (i=2; i<=n; i++) ni[i]=1ll*ni[i]*ni[i-1]%p;
if (m&&n) ans=1;
m=min(n,m);
for (i=2; i<=m; i++)
printf("%d",ans);
}
BZOJ 4402 Claris的劍 組合數學
由於存在集合等價的情況,我們就只考慮字典學最小的方案 假設最大值是ma x 那麼構造出的序列有兩種情況 1,2,1,2,1,2.3,2 3,2 3.ma x 2,max 1,ma x 2,max 1.ma x 1,2,1,2,1,2.3,2 3,2 3.ma x 2,max 1,ma x 2,max...
BZOJ4402 Claris的劍(組合數學)
這裡放傳送門 這題比較關鍵的一點就是注意到題目裡說兩把劍本質不同當且僅當存在一種數字的出現次數不同。也就是說這個東西跟數字的出現順序是無關的。那麼我們可以考慮確定一種排序方式讓每一種本質不同的解都唯一對應一種看起來比較好做的序列。因為每兩個元素相差必須是1,通過多畫幾個試試觀察可以發現每一種合法解都...
bzoj4402 Claris的劍(組合數學)
傳送門 思路 考慮怎麼才不會算重。顯然你的序列可以變化成 121 2.xx 1xx 1.ma x1 2 1 2.x x 1 x x 1.max 1212.xx 1xx 1.max和12 12.xx 1xx 1.ma xmax 1 1 2 1 2.x x 1 x x 1.max max 1 1212....