Luogu4451 國家集訓隊 整數的lqp拆分

2022-05-25 18:54:10 字數 751 閱讀 7923

題目大意:求對於所有$n$的拆分$a_i$,使得$\sum_^ma_i=n$,$\prod_^mf_$之和。其中$f_i$為斐波那契數列的第$i$項。

資料範圍:$n\leq 10^6$

首先不要被這個【國家集訓隊】給嚇到了,其實很簡單的。

首先考慮打表,。。。。(逃

顯然一眼就能想到卷積,設$f(x)$為$f$的生成函式。則

$$f(x)=\frac$$

$$ans=\sum_^nf^i(x)[x^n]$$

$$=\frac}[x^n]$$

$$=\frac[x^n]$$

根據直覺,這個多項式也是乙個常係數齊次線性遞推數列的生成函式,設為$g(x)$則

$$g(x)=2xg(x)+x^2g(x)+x$$

所以$g_=2*g_n+g_$

然後連矩陣乘法都不用就直接a了。

1 #include2

#define rint register int

3using

namespace

std;

4const

int mod = 1e9 + 7;5

intn, f1, f2, f3;

6int

main()

10for(rint i = 2;i <= n;i ++)

14 printf("%d"

, f3);

15 }

view code

Luogu1501 國家集訓隊 Tree II

題目描述 一棵n個點的樹,每個點的初始權值為1。對於這棵樹有q個操作,每個操作為以下四種操作之一 u v c 將u到v的路徑上的點的權值都加上自然數c u1 v1 u2 v2 將樹中原有的邊 u1,v1 刪除,加入一條新邊 u2,v2 保證操作完之後仍然是一棵樹 u v c 將u到v的路徑上的點的權...

Luogu 1975 國家集訓隊 排隊

luogu 1975 題意 給出乙個長度為n的數列以及m個交換兩個數的操作,問每次操作後逆序對數量 時間,下標和數的大小三維偏序,把交換操作看成是減去兩個數再加上兩個數,套板子就好了 發現這種計數型別的cdq一般有兩種寫法 感覺應該都差不多,但有些題目用兩種方式寫也有一些優劣之分,比如這道題,用第二...

Luogu 2839 國家集訓隊 middle

感覺這題挺好的。首先對於中位數最大有乙個很經典的處理方法就是二分,每次二分乙個陣列中的下標 mid 然後我們把 mid 代回到原來的陣列中檢查,如果乙個數 a geq mid 那麼就把 s 記為 1 否則把 s 記為 1 然後對 s 跑一遍字首和,觀察是否有乙個區間的和不小於 0 讀清楚題意之後發現...