僅有一行,包含兩個正整數n, m,表示棋盤的規模。
output
僅有一行,包含乙個整數,即跳法種數mod 30011。
sample input
3 5sample output
data constraint
對於10%的資料,1 ≤ n ≤ 10,2 ≤ m ≤ 10;
對於50%的資料,1 ≤ n ≤ 10,2 ≤ m ≤ 10^5;
對於80%的資料,1 ≤ n ≤ 10,2 ≤ m ≤ 10^9;
對於100%的資料,1 ≤ n ≤ 50,2 ≤ m ≤ 10^9。
題解比賽時心態崩了沒有調出來,血虧。
我還是太蔡了。
10%
我們考慮dp。設f[i
,j]f_
f[i,j]
表示走到(i,
j)(i,j)
(i,j
)這個位置的方案數。
o (n
∗m2)
o(n*m^2)
o(n∗m2
)暴力轉移。
50%
我們發現,上面的時間複雜度實在太大。
怎麼辦?我們發現轉移的時候j都是奇偶列交替列舉的。
於是我們可以利用字首和優化來分別記錄奇數列與偶數列。
o (n
∗m)o(n*m)
o(n∗m)
100%
我們發現,m極其的大。
那麼很容易想到矩陣。
但是我們的轉移是奇偶列交替來搞的。
這很難直接轉移。
乙個直觀的想法——由於是交替來搞,我們直接把奇列與偶列連在一起,變成下圖:
那麼,我們發現,由於偶列是不變的,奇列是轉移過去的。
那麼我們的轉移矩陣就很好推了。
首先,由於新的偶列與奇列都是繼承原來的,所以說,右上與左下都是1矩陣(a[i
,i]=
1a[i,i]=1
a[i,i]
=1)然後,由於轉移的新奇列是要與偶列進行dp的,所以左上是乙個dp矩陣(很好推)
但是新的奇列與原來的奇列是不dp的,所以右下是什麼都沒有的。
直接快速冪即可。
標程
type
arr=array[
1..100,1.
.100
] of int64;
var i,j,k,l,n,m,r,p,ans1,ans2:longint;
mo:int64=
30011
; a,b,jl:arr;
function qsm
(a,b:int64)
:int64;
var t,y:int64;
begin
t:=1
; y:
=a;while b>0do
begin
if b mod 2
=1 then t:
=t*y mod mo;
y:=y*y mod mo;
b:=b div 2
; end;
exit
(t);
end;
function cheng
(a,b:arr;p:longint)
:arr;
var i,j,k:longint;
begin
fillchar
(cheng,
sizeof
(cheng),0
);for i:
=1 to p do
begin
for j:
=1 to p do
begin
for k:
=1 to p do
begin
cheng[i,j]:=
(cheng[i,j]
+a[i,k]
*b[k,j]
) mod mo;
end;
end;
end;
exit
(cheng)
;end;
function ksm
(a:arr;b:int64)
:arr;
var t,y:arr;
begin
t:=a; y:
=a;dec
(b);
while b<
>0do
begin
if(b and 1)=
1 then
t:=cheng
(t,y,p)
; y:
=cheng
(y,y,p)
; b:
=b shr 1
; end;
exit
(t);
end;
begin
//assign(input,'0data.in');reset(input);
//assign(output,'0data.out');rewrite(output);
readln
(n,m)
; p:=2
*n;for i:
=1 to n do
begin
a[i,i]:=
1;if i>
1 then
begin
a[i-
1,i]:=
1;a[i,i-1]
:=1;
end;
end;
for i:
=1 to n do
begin
a[i+n,i]:=
1;a[i,n+i]:=
1;end;
m:=m-1
; jl:
=a; b:
=ksm
(jl,m)
;fillchar
(a,sizeof
(a),0)
; a[1,
1]:=
1;b:
=cheng
(a,b,p)
;if n=
1 then
begin
writeln
(b[1
,n*2])
; halt;
end;
writeln
((b[
1,n*2]
+b[1
,n*2-1
]) mod mo)
;end.
end.
JZOJ 4226 五校聯考3day2 A
傳送門 求按照規則使基地可以防禦敵人的入侵的至少要加的圍牆的條數 普通情況用s 2 s 2 s 2 s 2 s 2 s 2特殊地,我們需要對子環的情況進行判斷 include include include include include include include include includ...
JZOJ 4227 五校聯考3day2 B
傳送門 求對乙個字串在符合其字尾陣列的順序下填上任意字母使得和最大 不知道為什麼可以想到dpdp dp但其實dpdp dp方程還是很好理解的 設f i j f i j f i j 表示填到第i ii位,當前這一位應填jjj include include include include includ...
JZOJ4244 五校聯考6day2 yi
小明是 星際旅遊公司的員工,負責安排飛船,有n 艘飛船由他管理,每艘飛船能容納的人數都不同。今天小明被要求為乙個去銻星的旅遊團安排往返的飛船,旅遊團有m人,小明希望用最少的飛船完成任務。但不是所有的飛船都能用的,地球和銻星距離k镾 此單位由銻星人發明,後在星際旅遊業界廣泛使用 而每一艘飛船加滿燃料後...