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 ...