题意 :
- 给定一个层数为k的满二叉树,结点编号为标准的层序遍历的编号
- 魔方有六个面,如图,每个面一个颜色
- 树上的结点的颜色也是这六个颜色之一,但是两个相邻结点的颜色必须是 魔方中,颜色相邻的两种颜色
- 求这个满二叉树的合法染色方案 取模1e9 + 7
思路 :
- 假设固定根,每个结点必须和其父节点颜色满足要求
- 不管父节点颜色如何,这个结点都只有4种颜色可选
- 答案就是 6 ∗ 4 结 点 个 数 − 1 6 * 4^{结点个数-1} 6∗4结点个数−1
- 结点个数等于 2 k − 1 2^k-1 2k−1
- 这里 2 k 2^k 2k不会爆ll,可以直接去算
#include <iostream>
#include <cstring>
#include <algorithm>
#define endl '\n'
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
ll qmi(ll a, ll b)
{
ll res = 1 % mod;
while (b)
{
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
void solve()
{
ll k;
cin >> k;
// cout << 6ll * qmi(4ll, qmi(2ll, k) - 2ll) % mod << endl;
// ll tmp = ((qmi(2ll, k) % mod - 2ll) % mod + mod) % mod;
// cout << 6ll * qmi(4ll, tmp) % mod << endl;
cout << 6ll * qmi(4ll, (1ll << k) - 2ll) % mod << endl;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int _ = 1;
// cin >> _;
while (_ -- )
{
solve();
}
}