这是暴力的写法。
by lizongru @ 2017-05-21 22:19:43
@[lizongru](/space/show?uid=20865) 谁把标题打的搜索?!
???!!!
我正着反着搜都TLE了?!
正着搜:
```cpp
cnt=0;
void dfs(ll step,bool flag,ll num){
a[step]=flag;
if(num>k)return ;
if(step==n){
cnt++;
if(cnt==p){
for(int i=1;i<=n;i++)
printf("%d",a[i]);
exit(0);
}
return ;
}
dfs(step+1,0,num);
dfs(step+1,1,num+1);
}
int main( ){
n=read();k=read();p=read();
for(int i=0;i<=k;i++)
cnt+=C(n,i);
dfs(1,0,0);
dfs(1,1,1);
return 0;
}
```
反着搜:
```cpp
cnt=1;
void dfs(ll step,bool flag,ll num){
a[step]=flag;
if(num>k)return ;
if(step==n){
cnt--;
if(cnt==p){
for(int i=1;i<=n;i++)
printf("%d",a[i]);
exit(0);
}
return ;
}
dfs(step+1,1,num+1);
dfs(step+1,0,num);
}
ll C(int x,int y){
ll sum_x=1,sum_y=1,sum_x_y=1,j=1;
for(ll i=x-y+1;i<=x;i++){
sum_x*=i;
if(sum_x%j==0){
sum_x/=j;
j++;
if(j==y+1)break;
}
}
return sum_x;//还害得我用排列组合公式
}
int main( ){
n=read();k=read();p=read();
for(int i=0;i<=k;i++)
cnt+=C(n,i);
dfs(1,1,1);
dfs(1,0,0);
return 0;
}
//QAQ
```
by ABCDXYZ @ 2017-06-29 17:05:36
我爆搜过了啊
by Bzy_temp @ 2017-09-05 21:51:29