Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34556 | LYLAKIOIAKIOI | 【S】T3 | C++ | 通过 | 100 | 949 MS | 193332 KB | 1506 | 2024-11-10 19:46:35 |
#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; }