H War of Inazuma (Easy Version)
题意
在一个 n n n 维超立方体上,有 2 n 2^n 2n 个顶点,每个顶点分别由两支军队占领,记为 a , b a,b a,b ,现在要求构造出一个序列 s s s ,其中 s i s_i si 代表 顶点 i i i 由什么军队占领。其中,当顶点 i i i 与顶点 j j j 相邻,则 i , j i,j i,j 二进制位中有且仅有一位不同。且要求顶点 i i i 相邻的顶点中与顶点 i i i 的军队相同的顶点数不超过 ⌈ n ⌉ \lceil \sqrt{n}\ \rceil ⌈n ⌉ 。
直接考虑将顶点 i i i 的相邻顶点均与顶点 i i i 的占领军队不同,则可发现即顶点编号的二进制中 1 1 1 的个数相同的顶点的占领军队相同,即按照顶点编号的二进制中 1 1 1 的个数构造占领的军队即可。
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; ++i)
using namespace std;
typedef long long ll;
signed main() {
int n;
scanf("%d", &n);
int t = 1 << n;
rep(i, 0, n - 1) {
if (__builtin_popcount(i) & 1)
putchar('1');
else
putchar('0');
}
return 0;
}