賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。
經過長期觀察,atm 發現了穩定骰子的奧秘:有些數字的面貼著會互相排斥!我們先來規範一下骰子:1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起,骰子就不能穩定的壘起來。atm 想計算一下有多少種不同的可能的壘骰子方式。兩種壘骰子方式相同,當且僅當這兩種方式中對應高度的骰子的對應數字的朝向都相同。由於方案數可能過多,請輸出模 10^9 + 7的結果。
不要小看了 atm 的骰子數量哦~
輸入格式
第一行兩個整數 n(1≤n≤10^9),m(0≤m≤36),n表示骰子數目,
接下來 m 行,每行兩個整數 a,b,表示 a 和 b 數字不能緊貼在一起。
輸出格式
一行乙個數,表示答案模 10^9+7的結果。
樣例輸入
3 4
1 1
2 2
3 3
4 4
樣例輸出
10880
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define clr(a, b) memset(a, (b), sizeof(a))
#define ll o<<1
#define rr o<<1|1
#define fi first
#define se second
using
namespace
std;
typedef
long
long ll;
const
int mod = 1e9+7;
void add(ll &x, ll y)
int a[7] = ;
struct matrix ;
matrix multi(matrix x, matrix y)
}return z;
}matrix res, ori;
matrix pow(int n)
}bool map[7][7];
ll pow_mod(ll a, int n)
return ans;
}int main()
clr(ori.a, 0ll); clr(res.a, 0ll);
for(int i = 1; i <= 6; i++) pow(n-1);
ll ans = 0;
for(int i = 1; i <= 6; i++)
for(int j = 1; j <= 6; j++)
add(ans, res.a[i][j]);
cout
<< ans * pow_mod(4, n) % mod << endl;
return
0;}
計蒜客習題 朋友
在社交的過程中,通過朋友,也能認識新的朋友。在某個朋友關係圖中,假定 a 和 b 是朋友,b 和 c 是朋友,那麼 a 和 c 也會成為朋友。即,我們規定朋友的朋友也是朋友。現在,已知若干對朋友關係,詢問某兩個人是不是朋友。請編寫乙個程式來解決這個問題吧。輸入格式 第一行 三個整數 n,m,p n ...
計蒜客習題 逃跑
一位博主寫了ac 但是無論是廣度bfs還是深度dfs,都會報錯,dfs是執行超時,bfs是答案錯誤。傳送門 另一位博主使用了dfs 有興趣可以看下,沒有檢驗是否正確,傳送門 根據前位博主的bfs 做了幾項修改,然後用自己的 找錯前位博主,發現找不出來,有興趣的小夥伴可以試下,找一下前位博主的錯誤。當...
計蒜客習題 蒜廠年會
蒜廠要開年會了,所有的員工都要參加。每兩個員工之間都有乙個親密度。在同乙個專案工作過的員工之間的親密度為 1。如果 a 和 b b 和 c 均在同乙個專案中工作過,而 a 和 c 沒有,那麼 a 和 c 之間的親密度為 1 1 2。同理,如果 a 和 b 之間的親密度為 x,b 和 c 之間的親密度...