在網上看了一些答案,大部分都沒有ac,
題目不算難,但是不好理解,想通之後就很好做了,
想了大半天之後,終於做了出來,分享一下我的理解。。。。
大家可以在這個**上提交,看下自己敲的對不對:
壘骰子賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。① 建立乙個衝突矩陣conflict[i][j],表示 第i面 和 第j面的背面 衝突,至於為什麼要這樣,舉個例子:經過長期觀察,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[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 組互斥現象,每組中的那兩個數字的面緊貼在一起,骰子就...