提交时间:2024-11-10 19:46:35

运行 ID: 34556

#include<bits/stdc++.h> #define pc __builtin_popcount #define ui unsigned int using namespace std; const int N=3e5+10,LG=31,S=1.8e7; ui s[N]; int n,m,k; ui h[LG]; ui C[LG][LG]; void init(){ for(int i=0;i<=26;i++){ C[0][i]=1; for(int j=1;j<=i;j++){ C[j][i]=C[j-1][i-1]+C[j][i-1]; } } } /*ui C(int u,int d){ ui res=1; for(int i=d-u+1;i<=d;i++) res*=i; for(int i=1;i<=u;i++) res/=i; return res; }*/ void gh(){ for(int i=0;i<=26;i++){ ui w=(i>=k); for(int j=0;j<i;j++) w-=C[j][i]*h[j]; h[i]=w; } }ui c[S],f[S],g[LG]; void gf(){ for(int i=1;i<=m;i++) c[s[i]]++; for(int i=0;i<n;i++){ for(int j=0;j<(1<<n);j++){ if(!((j>>i)&1)){ c[j]+=c[j+(1<<i)]; } } }for(int i=0;i<(1<<n);i++){ f[i]=c[i]*h[pc(i)]; }for(int i=0;i<n;i++){ for(int j=0;j<(1<<n);j++){ if(((j>>i)&1)){ f[j]+=f[j-(1<<i)]; } } }for(int i=0;i<(1<<n);i++){ g[pc(i)]=max(g[pc(i)],f[i]); } } int main(){ cin>>n>>m>>k;init(); for(int i=1;i<=m;i++){ string s0;cin>>s0; for(int j=0;j<n;j++){ s[i]<<=1,s[i]+=(s0[j]-'0'); } }gh();gf(); for(int i=1;i<=m;i++){ for(int j=0;j<=n;j++){ if(g[j]>=i){ cout<<j<<'\n';break; } } } return 0; }