智乃醬的雙塔問題

2022-09-20 10:54:14 字數 1038 閱讀 3117

不妨先不考慮詢問,求從底層到頂層的方案

設\(dp_\)表示到第i層的j邊的方案數(j=0/1,0代表在左邊,1代表在右邊)

轉移方程為

\(dp_=dp_+[有『\』的樓梯]\cdot dp_\)

\(dp_=dp_+[有『/』的樓梯]\cdot dp_\)

不難寫出乙個矩陣

\[\begin

dp_&dp_\\

\end

*\begin

1&[if \quad '/']\\

[if\quad '\']&1\\

\end

= \begin

dp_&dp_\\

\end

\]因此可見每一層的轉移都是固定的,那麼我們可以用字首和來維護

所以對於每次詢問,只要求得區間的矩陣乘積即可

得到區間的矩陣乘積可以用線段樹維護,也可以直接用矩陣求逆來求,這裡用的是前者

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define pa pairusing namespace std;

const int maxn=2e6+101;

const int mod=1e9+7;

const int inf=2147483647;

const double pi=acos(-1);

int read()

struct matrix

return sum;

}void print()

matrix query(int k,int l,int r,int l,int r)

int main(){

n=read();m=read();char ch[maxn];scanf("%s",ch);

ls[0].a[0][1]=1;ls[1].a[1][0]=1;

for(int i=1;i

牛客 智乃與無意義的題目 K K

思路 要的是因子個數,考慮到給的a i 很小 10 以內的質數只有2 3 5 7 那麼考慮將每乙個數都質因數分解 然後最後總的方案數 2的個數 1 3的個數 1 5的個數 1 7的個數 1 即為總的方案數 1 include2 using namespace std 3 define ll long...