A:容易发现这要求所有子集中元素的最高位1的位置相同,并且满足这个条件也是一定合法的。统计一下即可。

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 1010
int n,cnt[40];
int main()
{
    freopen("subset.in","r",stdin);
    freopen("subset.out","w",stdout);
    while (scanf("%d",&n)>0)
    {
        memset(cnt,0,sizeof(cnt));
        for (int i=1;i<=n;i++)
        {
            int x=read();
            for (int j=30;~j;j--)
            if (x&(1<<j)) {cnt[j]++;break;}
        }
        for (int i=1;i<31;i++) cnt[0]=max(cnt[0],cnt[i]);
        printf("%d\n",cnt[0]);
    }
    return 0;
}
View Code

相关文章:

  • 2021-08-12
  • 2021-07-31
  • 2021-12-02
  • 2021-10-17
  • 2022-12-23
猜你喜欢
  • 2021-12-09
  • 2021-06-07
  • 2022-01-06
  • 2021-08-25
相关资源
相似解决方案