SHTSC2013 超級跳馬 矩陣快速冪

2021-09-24 22:20:59 字數 1765 閱讀 8943

僅有一行,包含兩個正整數n, m,表示棋盤的規模。

output

僅有一行,包含乙個整數,即跳法種數mod 30011。

sample input

3 5sample output

10data 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。..

...分析

90分:

做乙個3*n的矩陣,前n列表示距離下一行為奇數的每一列的答案的和,中間n列代表偶數的,最後n列代表最後一列的答案

100分:

換一種構圖

...程式(90分):

#include#include#includeusing namespace std;

int n,m,ansjz[155][155],jz[155][155],t[155][155],mo=30011;

void jzksm(int a[155][155],int b[155][155])

void work()

jz[i][n+i]=1;

jz[n+i][n+i]=1;

jz[i][2*n+i]=1;

jz[n+i][2*n+i]=1;

if (i+1<=n)

}ansjz[1][n+1]=1;

}int main()

work();

m--;

while (m!=0)

printf("%d",ansjz[1][2*n]);

return 0;

}

...

...程式(100分):

#include#include#includeusing namespace std;

int n,m,mo=30011,t[200][200],b[200][200],a[200][200],jz[200][200];

void jzksm(int a1[200][200],int b1[200][200])

void work()

for (int i=1;i<=2*n;i++)

for (int j=1;j<=2*n;j++)

a[i][j]=b[i][j]=jz[i][j];

memset(t,0,sizeof(t));

m-=3;

}int main()

work();

while (m!=0)

jzksm(a,b);

printf("%d",((long long)a[1][n]-b[1][2*n]+mo)%mo);

return 0;

}

矩陣乘 Shoi2013 超級跳馬

問題 f shoi2013 超級跳馬 時間限制 1 sec 記憶體限制 256 mb 題目描述 現有乙個n行m列的棋盤,乙隻馬欲從棋盤的左上角跳到右下角。每一步它向右跳奇數列,且跳到本行或相鄰行。跳越期間,馬不能離開棋盤。例如,當n 3,m 10時,下圖是一種可行的跳法。試求跳法種數mod 3001...

SHOI2013 超級跳馬

我是常年遊蕩於題解區的幽靈。直觀的想法就是字首和 差分優化dp,但還有些比較奇妙的方法or trick f i j f i 1 j 1 f i 1 j f i 1 j 1 color 因為可以一步跳到 f i j 的狀態也可以一步跳到 f i 2 j 反過來也成立 只考慮從左邊某個特定的列的轉移矩陣...

jzoj3294 SHTSC2013 超級跳馬

僅有一行,包含兩個正整數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 ...