2020 11 03 模擬賽 斐波

2022-06-12 12:45:07 字數 1942 閱讀 9781

假設$fib(n)$為斐波那契數列的第 $n$ 項,其中$fib(0)=0,fib(1)=1$,且$fib(n)=fib(n-1)+fib(n-2),(n > 1)$。 假設$s$是乙個可重集合$\$,$f(s)$ 定義為$f(s)=\sum_[fib(\sum_s)]$ 有乙個陣列$a_1,a_2, \cdots ,a_n$,牛妹會對陣列進行$q$次操作,每次操作可能是以下兩種 操作中的一種: 1. 把$a_p$變為$v$; 2. 計算 $\sum_^r \sum_^r f(\,\cdots,a_j)\})$。 對於每個操作 2,輸出答案模 $998244353$。

題目要求求出下式的值並支援修改操作:

$$\sum_^r \sum_^r f( \, \cdots ,a_j \})$$

其中$f(s)=\sum_[fib(\sum_s)]$

設$g(n)=fib^2(n)$也可以遞推,遞推公式為$g(n)=2g(n-1)+2g(n-2)-g(n-3)$(證明方法:使用通項公式硬算)

可以用矩陣寫出:

$$\begin

g(n)\\

g(n-1)\\

g(n-2)

\end

=\begin

2 & 2 & -1\\

1 & 0 & 0\\

0 & 1 & 0

\end

\begin

g(n-1) \\

g(n-2) \\

g(n-3)

\end$$

然後換成向量:

$$\vec=a\vec}=a^n\vec$$

那麼$\vec=\sum_\vec}$

考慮向$s$中加入乙個數$a$,可以得到$\vec)} = \vec + \sum_\vec} = \vec + a^a \vec} = (a^a + 1) \vec$

$1$表示單位矩陣

設$s=\$,那麼$\vec= \prod_^n (1+a^)\vec$

設$b_i=1+a^$,那麼題中所求即為$\sum_^r \sum_^r \prod_^j b_k$

用線段樹維護即可

常數特別難卡

#pragma gcc optimize(2)#include

#include

#include

using

namespace

std;

intn,q;

const

long

long mod=998244353

;struct

matrix

matrix

operator + (matrix z)const

matrix

operator * (const matrix &z)const

; }

matrix

operator ^ (int z)const

return

ret;

}}m[100005

],i,o,a;

struct

tree

; }

}tree[

400005

];inline

intread()

void update(int i,int l,int r,int

pos)

int mid=l+r>>1

;

if(pos<=mid) update(i<<1

,l,mid,pos);

else update(i<<1|1,mid+1

,r,pos);

tree[i]=tree[i<<1]+tree[i<<1|1];}

tree query(

int i,int l,int r,int ll,int

rr)int

main()

else

}return0;

}

斐波

noip模擬賽 斐波那契

分析 暴力分有90,真良心啊.a,b這麼大,連圖都建不出來,肯定是有乙個規律.把每個點的父節點寫出來 0 1 1 12 123 12345 12345678,可以發現每乙個迴圈的長度剛好是斐波那契數列中的第i項,那麼求個字首和,二分求一下lca就可以了.include include include...

NOIP模擬題 斐波那契數列

題目大意 給定長度為 n 序列 a 將它劃分成盡可能少的若干部分,使得任意部分內兩兩之和均不為斐波那契數列中的某一項。題解不難發現 2 times 10 9 之內的斐波那契數不超過 50 個 先求出第 i 個數之前最後乙個能和第 i 個數相加為斐波那契數的位置 last i 考慮每一部分 l,r 只...

HDU 5914 模擬,斐波拉契數列

hdu 5914 題目大意就是 給你乙個n,有1到n長度的木棍 問要使這些木棍組不成三角形 最少需要去掉幾根木棍 那樣例來舉例 n 41 2 3 4 我們需要去掉4這一根木棍 n 51 2 3 4 5 我們還是需要去掉4這一根木棍 n 61 2 3 4 5 6 我們需要去掉4 6 這兩根木棍 因為資...