乙個長度為 \(n\) 的序列,已知 \(a_1,a_n,n,d\),並滿足 \(a_i=\dfrac+a_}+d\),求 \(a_m\)
最近數學課學了點特徵方程,所以用它做了下這題
一般用特徵方程求通項的時候,是已知數列滿足 \(a_+ba_i+ca_=0\)
那麼設 \(a_-pa_n=q(a_n-pa_)\),轉化成 \(a_-(p+q)a_n+pqa_=0\)
此時應滿足 \(p+q=-b,pq=c\)
然後用韋達定理構造乙個兩個解分別是 \(p,q\) 的二次方程並把它解出來,就知道 \(p,q\) 了
如果無解當然就是不能這樣構造
進而設 \(b_n=a_-pa_n\),則:
\[b_n=qb_\rightarrow b_n=a_-pa_n=b_1q^=(a_2-pa_1)q^
\]同時除以 \(p^\),就是:
\[\dfrac}}-\dfrac=\dfrac}}
\]再設 \(c_n=\dfrac\)
就可以表示成:
\[c_-c_n=\dfrac}}
\]那麼對 \(c\) 做乙個累加,中間的一堆項就消沒了,得到:
\[c_n-c_1=\sum_^\dfrac}}
\]\[c_n=\dfrac\cdot \dfrac)^}}+\dfrac
\]還原成 \(a_n\),就是:
\[a_n=\dfrac(a_2-pa_1)(1-(\frac)^)}}+a_1p^
\]\[a_n=\dfrac}-p^)(a_2-pa_1)}-1}+a_1p^
\]也許能再化簡讓形式更好看一些?但我懶得化了
再看這個題
\[a_+2a_i-a_=2d
\]發現這個 \(2d\) 很耽誤事,但是可以設 \(a_i=a_i+d\),於是:
\[a_+2a_i-a_=0
\]按照之前講的,此時應滿足 \(p+q=-2,pq=-1\),於是構造方程 \(x^2+2x-1=0\)
兩個解對應 \(p,q\),也就是 \(p=\sqrt-1,q=-\sqrt-1\),當然把它們的值互換也不會對結果產生影響
但我們並不知道 \(a_n\) 表示式裡的 \(a_2\) 是什麼,但是知道 \(a_n\),於是可以變一下那個式子把 \(a_2\) 求出來:
\[a_2=\frac-1)(a_n-a_1p^)}}-p^}+a_1p
\]然後就可以帶入 \(n=m\) 來求出答案了
注意判斷一下 \(m=0\) 這種奇怪的情況
#include#include#include#include#include#include#include#define reg register
#define en std::puts("")
#define ll long long
inline long double power(long double a,int b)
int main()
luogu P1487失落的成績單
n 60,顯然不用矩陣乘法 由題目的遞推式可得,ai 2a i 1 a i 2 2d an 2a n 1 a n 2 2d 將右邊一直分解,顯然可以得到乙個只含a2的方程式,將a2解出來後,就可以通過遞推式求出am 資料大了還是要矩陣乘法的 include include include inclu...
帶姓名的成績單 a
作 者 霍雨佳 完成日期 2013 年12月5日 版 本 號 v1.0 問題描述 輸出按成績排名後的同學名單。樣例輸入 樣例輸出 問題分析 輸入同學的姓名成績,輸出按成績排名後的同學名單。include using namespace std int main string k,name 20 fo...
帶姓名的多科成績單
用陣列string name表示同學們的姓名,使姓名與成績的下標保持一致。設計輸入成績的函式,輸入3科成績後可以自動求出總分,並將資料全儲存到陣列中 include includeconst int size 2 using namespace std void outputfun string n...