2023年藍橋杯省賽B組真題 第九題壘骰子

2021-10-24 16:44:25 字數 1716 閱讀 5869

賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。

經過長期觀察,atm 發現了穩定骰子的奧秘:有些數字的面貼著會互相排斥!

我們先來規範一下骰子:1 的對面是 4,2 的對面是 5,3 的對面是 6。

假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起,骰子就不能穩定的壘起來。

atm想計算一下有多少種不同的可能的壘骰子方式。

兩種壘骰子方式相同,當且僅當這兩種方式中對應高度的骰子的對應數字的朝向都相同。

由於方案數可能過多,請輸出模 109+7 的結果。

輸入格式

第一行包含兩個整數 n,m,分別表示骰子的數目和排斥的組數。

接下來 m 行,每行兩個整數 a,b,表示 a 和 b 數字不能緊貼在一起。

輸出格式

共乙個數,表示答案模 109+7 的結果。

資料範圍

1≤n≤109,

1≤m≤36,

1≤a,b≤6

輸入樣例:

2 11 2

輸出樣例:

544遞迴和動歸都會超時,所以需要把複雜度降到o(n)以下,正解:矩陣快速冪

思路:與其他的矩陣快速冪一樣,主要在於如何構建矩陣,

首先第一層最下面有6種朝向(1,2,3,4,5,6),每種朝向又可以偏移4次,所以arr[6]=;表示第乙個塞子的情況。遞推矩陣m[6][6];

(第乙個6表示當前骰子數字那個朝上,第二個6表示前乙個骰子那個數字朝上具體看下面的列子) f[n]=arr*m^(n-1)

舉例:測試樣例:

2 11 2

輸出:544

測試樣例2:

4 36 5

3 15 4

輸出:186880

#

include

#include

typedef

long

long ll;

ll mod=

1000000007

;int p[7]

[7];

//記錄衝突

int dd[6]

=;//記錄對立面

struct

matrix}}

};matrix fun

(matrix a,matrix b)

//兩個矩陣相乘 }}

return res;

}matrix fun1

(ll n,matrix ans)

//矩陣快速冪

return res;

}int

main()

int arr[6]

=;//表示第乙個骰子的6種不同的朝向情況

matrix k;

//衝突矩陣

for(

int i=

0;i<

6;i++)}

k=fun1

(n-1

,k);

//最後得到的衝突矩陣和arr【】相乘

ll ss=0;

for(

int i=

0;i<

6;i++)}

printf

("%lld"

,ss)

;return0;

}

藍橋杯2015省賽B組第2題

2.星系炸彈 在x星系的廣袤空間中漂浮著許多x星人造 炸彈 用來作為宇宙中的路標。每個炸彈都可以設定多少天之後 比如 阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日 有乙個貝塔炸彈,2014年11月9日放置,定時為1000天,請你計算它 的準確日期。請填寫該日期,格式為 ...

2023年藍橋杯省賽B組真題(02) 粗心的小明

小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。有一次,老師出的題目是 36 x 495 他卻給抄成了 396 x 45 但結果卻很戲劇性,他的答案竟然是對的!因為 36 495 396 45 17820 類似這樣的巧合情況可能還有很多,比如 27 594 297 54 假設 a b ...

2023年藍橋杯省賽B組C C 題目 星系炸彈

a b組題目相同 星系炸彈 在x星系的廣袤空間中漂浮著許多x星人造 炸彈 用來作為宇宙中的路標。每個炸彈都可以設定多少天之後 比如 阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日 有乙個貝塔炸彈,2014年11月9日放置,定時為1000天,請你計算它 的準確日期。請填寫該...