2021杭電多校1 HDU6956-Pass!【特徵方程求解數列通向式+BSGS】
阿新 • • 發佈:2021-07-21
題目連結
賽中知道了\(f(i)=(n-2)*f(i-1)+(n-1)*f(i-2)\),然後考慮到矩陣上去了,然後歪了。
思路
看了題解才知道,可以將上式通過特徵方程求解數列的通項公式求得
\(f(t)=\frac{((n-1)^t+(n-1)*(-1)^t)}{n}=x (\mod 998244353)\)
寫一下是如何推匯出來的。
已知\(a_i=(n-2)*a_{i-1}+(n-1)*a_{i-2}\),移項並構造一個類似等比數列的東西:
\(a_i-x*a_{i-1}=(a_{i-1}-x*a_{i-2})*y\),
那麼可以發現
\(a_i=(x+y)*a_{i-1}-x*y*a_{i-2}\)
令\(c_1=x+y,c_2=-x*y\)其特徵方程為:
\(x^2=c1*x+c2\) 即 \(x^2=(n-2)*x+(n-1)\)
求解可得 \(x_1=-1,x_2=n-1\)。
注意到原式子,代入\(x1,x2\)可通過
\(x+y=n-2,-x*y=n-1\)
求得\(y1=n-1,y2=-1\)。
由上文提到的這個式子 \(a_i-x*a_{i-1}=(a_{i-1}-x*a_{i-2})*y\) 通過移項得\(\frac{a_i-x*a_{i-1}}{a_{i-1}-x*a_{i-2}}=y\),這是一個首項為\(a_1-x*a_0\),公比為\(y\)得等比數列,即:
\(a_i-x*a_{i-1}=(a_1-x*a_0)*y^{i-1}\)
可列出方程組 \[ \begin{cases} a_i-x_1*a_{i-1}=(a_1-x_1*a_0)*y_1^{i-1} \\ a_i-x_2*a_{i-1}=(a_1-x_2*a_0)*y_2^{i-1} \\ \end{cases} \]
得
\(a_i=\frac{(a_1-x_1*a_0)*y_1^{i-1}*x_2-(a_1-x_2*a_0)*y_2^{i-1}*x_1}{x_2-x_1}\)
已知\(a_0=1,a_1=0,x_1=-1,x_2=n-1,y_1=n-1,y_2=-1\),代入可得:
\(a_i=\frac{(n-1)^i+(n-1)*(-1)^i}{n}\)
那麼就是式子\(f(t)=\frac{((n-1)^t+(n-1)*(-1)^t)}{n}\)
然後分奇偶BSGS即可。