給出\(n, m(1 \le n, m \le 10^)\),求\(f(n, m) \ \mod \ 10^9+7\)
$$\begin
f(1, 1) = 1 \\
f(i, 1) = cf(i-1, m) + d \\
f(i, j) = af(i, j-1) + b & (j \neq 1)
\end
$$其中\(1 \le a, b, c, d \le 10^9\)
對於遞推式\(f_i = af_ + b\)
當\(a=1\)時通項為\(f_n = f_1 + (n-1) b\)
當\(a \neq 1\)時通項為\(f_n = a^ f_1 + \frac - 1)}\)
那麼根據上式可以求出對應的係數
\[f(i, m) = xf(i, 1) + y
\]然後又得到
\[f(i, 1) = c(xf(i-1, 1) + y)+d = cxf(i-1, 1) + cy + d
\]就可以推出\(f(n, 1)\),最後再逆推回\(f(n, m)\)即可。
快速冪部分,可以根據尤拉定理\(a^ \equiv 1 \pmod, (a, p)=1\)可以知道\(a^ \equiv 1 \pmod\)
所以我們可以在讀入的時候就對\(n, m\)模\(10^9+6\)然後再快速冪。
#include using namespace std;
typedef long long ll;
const int mo=1e9+7;
int ipow(int a, int b)
int x=1;
for(; b; b>>=1, a=(ll)a*a%mo)
} return x;
}void getint(int &n, int &nn)
}int main()
else
if(k==1)
else
ans=(ans-d+mo)%mo;
ans=(ll)ans*ipow(c, mo-2)%mo;
printf("%d\n", ans);
return 0;
}
bzoj 3240 Noi2013 矩陣遊戲
有乙個巨大的n行m列的矩陣。這個矩陣滿足乙個神奇的性質 若用f i j 來表示矩陣中第i行第j列的元素,則f i j 滿足下面的遞推式 f 1 1 1 f i,j a f i j 1 b j 1 f i,1 c f i 1 m d i 1 遞推式中a,b,c,d都是給定的常數。現在問你f n m 的...
BZOJ3240 Noi2013 矩陣遊戲
婷婷是個喜歡矩陣的小朋友,有一天她想用電腦生成乙個巨大的n行m列的矩陣 你不用擔心她如何儲存 她生成的這個矩陣滿足乙個神奇的性質 若用f i j 來表示矩陣中第i行第j列的元素,則f i j 滿足下面的遞推式 f 1 1 1 f i,j a f i j 1 b j 1 f i,1 c f i 1 m...
bzoj 3243 Noi2013 向量內積
兩個d 維向量a a1,a2,ad 與b b1,b2,bd 的內積為其相對應維度的權值的乘積和,即 現有 n 個d 維向量x1,xn 小喵喵想知道是否存在兩個向量的內積為k的倍數。請幫助她解決這個問題 首先做乙個轉換 如果把 b a a t 構造出來,那麼 b i j 就代表向量 i 和向量 j 的...