题解:CF234G Practice
· 阅读需 2 分钟
原题链接
解题思路
设 人需要 次比赛,下一场比赛将分成 人和 人。
显然这 人和 人相互独立,不需要额外的比赛,所以 。显然当 ,即两队人数均匀时,获得最优解。
每次比赛都至多让两半人相互独立,所以至少需要 场比赛。
注意到,任意两个不同的非负整数,至少有一位二进制不同,所以不妨根据第 位二进制进行分组。()
参考代码
#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int a[N];
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
int k=__lg(n-1)+1;
cout<<k<<'\n';
for(int j=0;j<k;j++)
{
int ans=0;
for(int i=0;i<n;i++)
{
if(!(i>>j&1))ans++;
}
cout<<ans<<' ';
for(int i=0;i<n;i++)
{
if(!(i>>j&1))cout<<i+1<<' ';
}
cout<<'\n';
}
return 0;
}