Atcoder abc288
https://atcoder.jp/contests/abc288/tasks
G - 3^N Minesweeper
[0…3^n-1]的位置上 有0个或1个炸弹
如果两个数在三进制表示下, 所有对应位的差<=1
,那么两个数相邻
对于p=0..3^n-1 位置p相邻的位置上有 $a[p]$个炸弹(包括自己)
请构造一个满足的方案
范围
n 12
2s
1024mb
我的思路
3^12 = 531441
注意到 111111111111111111(3进制下) 和所有相邻
而 111111111111111110(3进制下) 和除了 ???????????????????2(3进制下)以外的相邻
因此可以计算 ???????????????????2 中炸弹的个数
同理可以计算 ???????????????????0 中炸弹的个数
因此也就有算 ???????????????????1 中炸弹的个数
换成表就是
1 | 0 1 2 |
考虑两位
1 | 00 01 02 10 11 12 20 21 22 |
看起来就是解一个超大的线性方程组
并且 在2位的时候, 它依然是 线性无关的, 也就是有唯一解
如果要记录 个数关系可能需要7 ^ 12=13841287201
很大
而上面形状可以知道
1 | f(00,10,20) = (00+01 , 10+11 , 20+21 ) |
还是不是特别能知道
1 | 000 001 002 010 011 012 020 021 022 100 101 102 110 111 112 120 121 122 200 201 202 210 211 212 220 221 222 |
1 | (100,101,102) = f( |
这样能看出一点规律
最叶子的是高位0~2其它位一致,
然后 按照从高到低在组内交换