Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34517 | A21μΘ_wjy | 【S】T3 | C++ | 运行超时 | 10 | 1000 MS | 256992 KB | 1560 | 2024-11-10 16:45:57 |
#include<bits/stdc++.h> #define int long long #define pc __builtin_popcountll using namespace std; const int maxm=3e5+7; const int maxn=30; const int maxN=(1<<24)+7; int n,m,k; int N; int f[maxm]; int F[maxN]; int d[maxm]; inline void AND(int *A){ for(int L=2,m=1;L<=N;m=L,L<<=1){ for(int i=0;i<N;i+=L){ for(int j=0;j<m;j++)A[i+j]+=A[i+j+m]; } } } inline void OR(int *A){ for(int L=2,m=1;L<=N;m=L,L<<=1){ for(int i=0;i<N;i+=L){ for(int j=0;j<m;j++)A[i+j+m]+=A[i+j]; } } } int C[maxn][maxn]; inline void InitC(){ for(int i=0;i<maxn;i++){ C[i][0]=1; for(int j=1;j<=i;j++)C[i][j]=C[i-1][j]+C[i-1][j-1]; } } inline void Initf(){ f[0]=(0>=k); for(int i=1;i<=n;i++){ f[i]=i>=k; for(int j=0;j<i;j++)f[i]-=f[j]*C[i][j]; } } inline void Slv(){ cin>>n>>m>>k,N=(1<<n); for(int i=1;i<=m;i++){ int S=0; for(int j=1;j<=n;j++){ char t; cin>>t; t-='0'; S=(S<<1)|t; } F[S]++; } InitC(); Initf(); AND(F); for(int i=0;i<N;i++)F[i]*=f[pc(i)]; OR(F); memset(d,0x3f,sizeof(d)); for(int i=0;i<N;i++)d[F[i]]=min(d[F[i]],1ll*pc(i)); for(int i=m;i>=1;i--)d[i]=min(d[i],d[i+1]); for(int i=1;i<=m;i++)cout<<d[i]<<endl; return; } signed main(){ #ifndef ONLINE_JUDGE freopen("1.in","r",stdin); freopen("1.out","w",stdout); #endif Slv(); }