BZOJ 3240 Noi2013 矩陣遊戲

2022-05-11 21:39:28 字數 1109 閱讀 8732

給出\(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 的...