Title
Solution
·········要善于推规律和完善代码习惯。
Code
#include<cstdio>
#include<algorithm>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std;
int c[5001][35],n,k,q;
int main(){
scanf("%d%d",&n,&k);
rep(i,0,5000) c[i][0]=1;
rep(i,1,5000) rep(j,1,30) c[i][j]=c[i-1][j-1]+c[i-1][j];
if (n==1){ rep(i,1,k) putchar('1'); return 0;}
if (k==1){ putchar('1'); rep(i,2,n) putchar('0'); return 0;}
for(q=k;c[q][k]<=n;q++); q--; k--; putchar('1');
rep(i,k,q-1) n-=c[i][k];
rep(i,1,q)
if (!k||c[q-i][k]>=n) putchar('0');
else putchar('1'),n-=c[q-i][k],k--;
return 0;
}