提交时间:2024-11-10 14:33:50
运行 ID: 34499
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=2e5+10,mod=1e9+7; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,k,jc[50],jc_inv[50]; int qp(int a,int b){ int res=1; while(b){ if(b&1)res=res*1ll*a%mod; a=a*1ll*a%mod;b>>=1; }return res; } int trans(){ int x=0;char ch=getchar(); while(ch<'0'||ch>'1')ch=getchar(); while(ch>='0'&&ch<='9')x=x*2+ch-'0',ch=getchar(); return x; } #define ppc __builtin_popcount int T[int(3e5)+10]; int f[1<<24],g[40]; int C(int n,int m){if(n<0||m<0||m<n)return 0;return jc[m]*1ll*jc_inv[m-n]%mod*1ll*jc_inv[n]%mod;} void slv(){ n=read(),m=read(),k=read(); up(i,1,m){ int x=trans(); f[x]++; } jc[0]=jc_inv[0]=1;up(i,1,n)jc[i]=jc[i-1]*1ll*i%mod,jc_inv[i]=qp(jc[i],mod-2); up(i,0,n-1)up(j,0,(1<<n)-1)if(!((j>>i)&1))f[j]+=f[j+(1<<i)]; up(i,k,n){ g[i]=1; up(j,k,i-1)g[i]=(g[i]-g[j]*1ll*C(j,i)%mod+mod)%mod; } up(i,0,(1<<n)-1)f[i]=f[i]*1ll*g[ppc(i)]%mod; up(i,0,n-1)up(j,0,(1<<n)-1)if(!((j>>i)&1))(f[j+(1<<i)]+=f[j])%=mod; //up(i,0,(1<<n)-1)printf("f[%d]=%d\n",i,f[i]); up(i,1,m)T[i]=1e9; up(i,1,(1<<n)-1)T[f[i]]=min(T[f[i]],ppc(i)); down(i,m-1,1)T[i]=min(T[i+1],T[i]); up(i,1,m)printf("%d\n",T[i]); } int main(){ //freopen("set.in","r",stdin); //freopen("set.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }