題目鏈結luogu1397矩陣遊戲
題目大意
已知 ⎧⎩⎨
⎪⎪f1
,1=1
fi,j
=a∗f
i,j−
1+bf
i,1=
c∗fi
−1,m
+d[j
!=1]
[i≠1
] 求f
n,m
我們可以構造矩陣 [1
fn,1
]×[1
0ba]
m−1=
[1fn
,m]
⇒ [1
c∗fn
−1,m
+d]×
[10b
a]m−
1=[1
fn,m
] ⇒
令t=[
10ba
]m−1
x=t2,2
y=t1
,2 ∴
fn,m
=x∗c
∗fn−
1,m+
x∗d+
y ⇒
[1f1
,m]×
[10x
∗d+y
x∗c]
n−1=
[1fn
,m]
所以我們可以先快速冪求出f1
,m然後再快速冪求出fn
,m但是由於n,
m 很大n,
m≤101000000
我們用高精度顯然超時,而且非常不好打
因為109+
7 是乙個質數,所以我們考慮費馬小定理 ap
−1≡1
(modp)
⇒an≡
an(modp−
1)(modp)
因為矩陣乘法也是滿足費馬小定理的
但是有一點問題(這裡只舉例說2×
2 的矩陣 n×
n 的矩陣也是一樣的) [a
cbd]
p−1≡
[100
1]if a≠d
(modp)
[acb
d]p≡
⎧⎩⎨⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪[a0
0a][
acbd
]if a=d
if a≠d
(modp)
又在這道題中兩個矩陣的
a 都為1⇒
[1fn
,1]×
[10b
a]m−
1=[1
fn,1
]×⎧⎩
⎨⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪[10
ba]m
−1(modp)
[10b
a]m−
1(modp−1
)if a=1
if a≠1
所以我們可以直接取模,對於第二個矩陣快速冪也要判斷一下x∗
c 是否等於1
否則會被uoj上的資料ha
ck掉(當然你第二個不判斷也可以過官方資料,第乙個不判你也有85分)
這裡貼**(**有一些奇奇怪怪的東西 當然你可以無視)
#include
#include
#define re register int
#define fp(i,a,b) for(re i=a,i=b;i<=i;++i)
#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
char ss[1
<<17],*a=ss,*b=ss,ch;
inline
char gc()return*a++;}
template
inline
void sdf(t&x)
inline
void cis(char*s)
char sr[1
<<20],z[20];int c=-1,z;
template
inline
void wer(t x)
const
int n=3,p=1e9+7;
typedef
int arr[n];
typedef
long
long ll;
struct matrix
matrix(re x=0)
inline matrix operator*(matrix b)const
matrix operator^(ll b)
}t;ll ans=1,n,m,a,b,c,d,mod=p-1;char s1[1000010],s2[1000010];
int main()
對於這種一階遞推式我們完全可以用等比數列的通項公式來求(反正上必修五老師會講怎求的)注意接下來的運算都是帶取模的,模數p=
109+7
fn,m=a∗
fn,m
−1+b
fn,m
=return
*a++;}
templateinline void sdf(t&x)
inline void cis(char*s)
char sr[1
<<20],z[20];int c=-1,z;
templateinline void wer(t x)
const int n=3,p=1e9+7;
typedef int arr[n];
typedef long long ll;
ll ans,n,m,a,b,c,d,mod;char s1[1000010],s2[1000010];
inline ll powmod(rg a,rg b)
int main()這兩份**的複雜度都是一樣的,主要卡在讀入上。讀者可以考慮把n%p和n%(p-1)都存下來,不要先存字串。這樣的話會快一些(純粹是為了刷個排名吧)**這裡就不貼了,留給讀者自己思考。
NOI2013 矩陣遊戲
據學長的話來說 這是當年noi最簡單的一道題 於是抱著試一試的心態做了一做 蒟蒻qaq 由於矩陣乘法不會,只能數學必修的種數列知識推公式 先橫向推 f x k a f x 1 k 展開就可以得到乙個等比數列 然後根據等比數列的性質可得 fx ax 1 f1 b ax 1 1 a 1 至此我們完成了將...
NOI2013 矩陣遊戲
題意 對於乙個n行m列的矩陣,第i行第j列的元素為f i j 已知a,b,c,d,並且矩陣元素滿足 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 求f n m 答案對1e9 7取模 1 n,m 1e1000000 1 a,b,c,d 1e9 ...
矩陣乘法 NOI2013 向量內積
兩個 d 維向量 a a1,a2,ad 與 b b1,b 2,bd 的內積為其相對應維度的權值的乘積和,即 a b i 1 daib i a1 b1 a 2b2 ad bd現在有 n 個 d維向量 x1 x2,xn 小喵喵想知道是否存在兩個向量的內積為 k 的倍數。請幫助她解決這個問題。第一行包含 ...