War of Inazuma (Easy Version)
题意:
-
题目描述的十分诡异,什么 n n n 维超立方体,就没看懂
换一种我能理解的说法就是:一个 n n n 位的二进制数能表示 0 − − 2 n − 1 0--2^n-1 0−−2n−1 ,对于这 2 n 2^n 2n 个数来说,每个单独拎出来与之相邻的有 n n n 个(相邻的定义:Two vertices are adjacent if and only if there exists exactly one different bit in their nnn-bit binary representation.)
现在让你对 2 n 2^n 2n 个顶点进行染色 0 o r 1 0\ or\ 1 0 or 1 ,使得对于每一个顶点,与之相邻的 n n n 个顶点并且颜色相同的顶点个数不超过 n \sqrt{n} n
分析:
-
现考虑 n = 1 , 2 , 3 n=1,2,3 n=1,2,3 ,并且令 0 0 0 顶点( v 0 v_{0} v0 )为 0 0 0 ,顶点个数为 l e n len len
-
n = 1 , 2 n=1,2 n=1,2 个点, v 0 v_{0} v0 与 v 1 v_{1} v1 相邻且异色,所以是 01 01 01
-
n = 2 , 4 n=2,4 n=2,4 个点, v 2 v_{2} v2 与 v 3 v_{3} v3 相邻且异色, v 2 v_{2} v2 与 v 0 v_{0} v0 相邻且异色, v 3 v_{3} v3 与 v 1 v_{1} v1 相邻且异色,所以是 0110 0110 0110
-
n = 3 , 8 n=3,8 n=3,8 个点, v 6 v_{6} v6 与 v 7 v_{7} v7 相邻且异色, v 6 v_{6} v6 与 v 4 v_{4} v4 相邻且异色, v 7 v_{7} v7 与 v 5 v_{5} v5 相邻且异色 , v 4 v_{4} v4 与 v 5 v_{5} v5 相邻且异色
(这是仅仅 后 4 个 后4个 后4个 之间的关系,完全继承了 前 4 前4 前4 个的关系)再加上 后 4 个 后4个 后4个 与 前 4 个 前4个 前4个 之间的关系,
v 4 v_{4} v4 与 v 0 v_{0} v0 相邻且异色, v 5 v_{5} v5 与 v 1 v_{1} v1 相邻且异色, v 7 v_{7} v7 与 v 3 v_{3} v3 相邻且异色, v 6 v_{6} v6 与 v 7 v_{7} v7 相邻且异色
得出结果为: 01101001 01101001 01101001
我也讲不太明白了 …
就是当 n = n + 1 n=n+1 n=n+1 时
原来的 v 0 v_0 v0 到 v l e n − 1 v_{len-1} vlen−1 保持不变,取反得到 v 0 + l e n v_{0+len} v0+len 到 v 2 l e n − 1 v_{2len-1} v2len−1
大概讲一下为什么这样之后,相邻的 n + 1 n+1 n+1 个点会不相同
对于 v 0 到 v l e n − 1 v_{0}到v_{len-1} v0到vlen−1 肯定是成立的,因为 v 0 + l e n v_{0+len} v0+len 到 v 2 l e n − 1 v_{2len-1} v2len−1 是由 v 0 v_0 v0 到 v l e n − 1 v_{len-1} vlen−1 取反得来的
同理,对于 v 0 + l e n v_{0+len} v0+len 到 v 2 l e n − 1 v_{2len-1} v2len−1 ,完全继承了 v 0 到 v l e n − 1 v_{0}到v_{len-1} v0到vlen−1 之间的关系,所以也是成立的
-
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=(1<<23);
int a[N];
signed main()
{
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int n;
cin>>n;
cout<<a[0];
for(int i=0;i<n;i++)
{
int len = 1<<i;
for(int j=0;j<len;j++)
{
a[j+len] = a[j]^1;
cout<<a[j+len];
}
}
return 0;
}