題解 P5175 數列

2022-07-22 12:51:13 字數 1577 閱讀 2288

luogup5175 數列

\[n\leq 10^

\]這擺明要用矩陣……

\[ans=\sum_^na_i^2

\]\[a_n=x\cdot a_+y\cdot a_\rightarrow

\]\[a_n^2=x^2a_^2+2xy\cdot a_a_+y^2a_^2

\]所以我們可以知道

\[\color\;,\;a_\;and\;a_\cdot a_,}

\]\[\color}

\]所以我們自然而然地想到構造矩陣

設s(n)=ans(n);

\[\begins_n\\a_^2\\a_\cdot a_\\a_^2\end

=\begin

1&\;1&\;0&\;0

\\0 &\;x^2&\;2\cdot xy&\;y^2

\\0&\;x&\;y&\;0

\\0&\;1&\;0&\;0

\end

\times

\begins_\\a_^2\\a_\cdot a_\\a_^2\end

\]然後我們最初的矩陣是

\[\begins_\\a_^2\\a_\cdot a_\\a_^2\end

\]所以答案就是初始矩陣乘以n-1次構造矩陣

#include#define ll long long

const ll mod = 1e9 + 7;

struct matrix

} return ;

}};matrix operator *(const matrix &a, const matrix &b)

} }c.line = a.line;

c.cross = b.cross;

return c;

}int starseven(void)

else if(n == 2)

ans.mem();

txt.mem();

ans.line = 4;

ans.cross = 1;

ans.va[1][1] = a1 * a1 % mod;

ans.va[2][1] = a2 * a2 % mod;

ans.va[3][1] = a2 * a1 % mod;

ans.va[4][1] = a1 * a1 % mod;

txt.line = 4;

txt.cross = 4;

txt.va[1][1] = 1ll;

txt.va[1][2] = 1ll;

txt.va[2][2] = x * x % mod;

txt.va[2][3] = 2ll * x % mod * y % mod;

txt.va[2][4] = y * y % mod;

txt.va[3][2] = x;

txt.va[3][3] = y;

txt.va[4][2] = 1ll;

n -= 1ll;

while(n)

write(ans.va[1][1]);

puts("");

} return 0;

}

題解 P2710 數列

區間操作集大成者 可能吧 by某位不願意透露姓名的巨學 本題需要實現 共七個操作 全部操作都涉及到序列 於是我們考慮使用splay或者fhq treap實現 這裡使用fhq treap 前置芝士 蛤?不會?左轉度娘 必應娘 谷歌娘 左轉p3391題解區,包教包會,不會不要錢本來就不要錢吧 左轉p45...

P1182 數列分段 Section II 題解

演算法思路 首先求最大值最小或最小值最大問題應用二分來直接二分出答案,其次寫出check函式判斷,由題意可得,答案的範圍一定在數列的最大值至數列所有項的和之間,於是我們可令l 數列中最大值,r 數列所有項的和,而check函式應判斷我們二分到的答案最少能分為幾段,如果段數大於m則答案在mid右側,否...

題解 P6435 EZEC 1 數列

傳送門 久違地來一波題解,來乙個數學角度推式子的方法 記第 k 次合併後的第 i 個數為 f 根據題意,所求即為 ans f 且有 f af bf c,f i 形式上,我們設 exists d wedge f d a f d b f d 則不難換算出 a b 1 d c 注意,只是形式上這樣設,d ...