题解:CF234G Practice
Mrkn_chenyx12 · · 题解
解题思路
如果我们把一个人的分队情况看作一个二进制串,每次分队看作一个二进制位,那么显然一组合法的解就是使得不存在两个人的分队情况是同一个二进制串。
那么,显然地,最小的比赛次数就是
参考代码
#include <bits/stdc++.h>
using namespace std;
int n, a[1024];
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
scanf("%d", &n);
int cnt, k = ceil(log2(n));
printf("%d\n", k);
for (int i = 0; i < k; i++) {
cnt = 0;
for (int j = 1; j <= n; j++) {
if (j & (1 << i)) a[++cnt] = j;
}
printf("%d ", cnt);
for (int j = 1; j <= cnt; j++) printf("%d ", a[j]);
puts("");
}
return 0;
}