壘骰子 矩陣快速冪

2021-10-08 12:28:57 字數 2391 閱讀 8815

在網上看了一些答案,大部分都沒有ac,

題目不算難,但是不好理解,想通之後就很好做了,

想了大半天之後,終於做了出來,分享一下我的理解。。。。

大家可以在這個**上提交,看下自己敲的對不對:

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

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

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

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

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

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

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

不要小看了 atm 的骰子數量哦~

「輸入格式」

第一行兩個整數 n m

n表示骰子數目

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

「輸出格式」

一行乙個數,表示答案模 10^9 + 7 的結果。

「樣例輸入」

2 1

1 2

「樣例輸出」

544
「資料範圍」

對於 30% 的資料:n <= 5

對於 60% 的資料:n <= 100

對於 100% 的資料:0 < n <= 10^9, m <= 36

資源約定:

峰值記憶體消耗 < 256m

cpu消耗  < 2000ms

① 建立乙個衝突矩陣conflict[i][j],表示 第i面 和  第j面的背面 衝突,至於為什麼要這樣,舉個例子:

比如題目中的例子, conflict[1][5] 和 conflict[2][4] 設成0,

代表 當第一層的骰子,1朝上的時候,那麼第二層骰子,5就不能朝上(2的背面),不然的話1和2就緊貼了。

② 建立乙個count[j]矩陣,記錄當前某高度下的各個面朝上的總方案數,當然剛開始的時候count[1]=count[2]=···=count[6]=1,因為第一層頂層可以是任意一面。

③ 現在conflict 乘 count ,可以得到第二層 各個面朝上 的總方案數。

乘完以後,count裡面,第乙個5的意思是,如果第一層的頂面是1,那第二層的頂面有5種擺放方式(因為5不能朝上)。

然後每個面的總方案數加起來5+5+6+6+6+6 = 34,就是壘骰子總方案數了。

④ 如果要得到第三層 各個面朝上的總方案數,只需要cnflict 乘以 第二層的count矩陣;

⑤ 那麼現在得出結論,

要知道第2層 各個面朝上的總方案數,只需要計算 cnflict  * count 

要知道第3層 各個面朝上的總方案數,只需要計算 cnflict  * cnflict  * count 

以此類推,

要知道第n層 各個面朝上的總方案數, 只需要計算 cnflict * cnflict * ··· * cnflict  * count   n-1 個cnflict相乘

⑥最後的count每項加起來,然後乘以

#include #include #define ll long long

using namespace std;

const ll mod = 1e9 + 7;

int back = ;

struct matrix

;matrix mul(matrix a, matrix b)

}return c;

}matrix pow(matrix a, ll k)

return ans;

}ll pow2(ll num, ll k)

return ans % mod;

}int main()

conflict = pow(conflict, n - 1);

ll sum = 0;

for (int i = 1; i <= 6; i++)

for (int j = 1; j <= 6; j++)

sum = (sum * pow2(4, n)) % mod;

cout << sum << endl;

system("pause");

return 0;

}

壘骰子 矩陣快速冪

賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。經過長期觀察,atm 發現了穩定骰子的奧秘 有些數字的面貼著會互相排斥!我們先來規範一下骰子 1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起,骰子就...

壘骰子(經典遞推 矩陣快速冪)

賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。經過長期觀察,atm 發現了穩定骰子的奧秘 有些數字的面貼著會互相排斥!我們先來規範一下骰子 1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起,骰子就...

藍橋杯 壘骰子 矩陣快速冪

賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。經過長期觀察,atm 發現了穩定骰子的奧秘 有些數字的面貼著會互相排斥!我們先來規範一下骰子 1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起,骰子就...