1 条题解
-
0

#include <cstdio> const int M = 21; int read() { int x=0,f=1;char c; while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;} while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();} return x*f; } int n,m,f[1<<M][M];char s[1<<M]; signed main() { n=read();m=read(); for(int i=0;i<=n;i++) { scanf("%s",s); for(int j=0;j<(1<<i);j++) f[(1<<i)|j][i]=(s[j]=='1'); } for(int i=n;i>=1;i--) for(int j=0;j<(1<<i);j++) for(int k=i;k>0;k--) if(f[(1<<i)|j][k]) { int t=f[(1<<i)|j][k],S=j>>k,T=j&((1<<k)-1); f[(1<<i-k)|S][0]+=t; if(T)//add 1 { int u=k-1; while(!(T>>u&1)) u--; f[(1<<i-k+u+1)|(S<<u+1)|(1<<u) |(T&((1<<u)-1))][u]+=t; } if((~T)&((1<<k)-1)) { int u=k-1; while(T>>u&1) u--; f[(1<<i-k+u+1)|(S<<u+1) |(T&((1<<u)-1))][u]+=t; } } for(int i=n;i>=0;i--) for(int j=0;j<(1<<i);j++) if(f[(1<<i)|j][0]>=m) { for(int k=i-1;k>=0;k--) printf("%d",j>>k&1); puts(""); return 0; } }
- 1
信息
- ID
- 8668
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者