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

运行 ID: 34548

#include<bits/stdc++.h> #define pc __builtin_popcount using namespace std; const int N=3e5+10,LG=31,S=1.8e7; int s[N]; int n,m,k; long long h[LG]; int fac[N],inv[N];int LM=55; long long C(int u,int d){ long long 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<=23;i++){ long long w=(i>=k); for(int j=0;j<i;j++) w-=C(j,i)*h[j]; h[i]=w; } }long long 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; 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; }