jzoj3294 SHTSC2013 超級跳馬

2021-09-24 22:10:36 字數 3620 閱讀 7202

僅有一行,包含兩個正整數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镾 此單位由銻星人發明,後在星際旅遊業界廣泛使用 而每一艘飛船加滿燃料後...