AcWing 1382. 比特串
原题链接
中等
作者:
虹之间
,
2021-01-19 15:46:39
,
所有人可见
,
阅读 470
#include <iostream>
using namespace std;
const int N = 32;
long long c[N][N];
void init()
{
c[0][0] = 1;
for(int i = 1; i < N; i ++ )
for(int j = 0; j < N; j ++ )
if(!j) c[i][j] = 1;
else c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
}
int main()
{
init();
long long N, L, I; cin >> N >> L >> I;
string res;
for(int i = 1; i <= N; i ++ ){
// 尝试填0,则剩下N-i个位置和L个1
long long s = 0;
for(int j = 0; j <= L; j ++ ) s += c[N - i][j];
if(I <= s){ // 当前位只能填0
res += '0';
continue;
}
// 否则只能填1,则剩下N-i个位置和L-1个1
res += '1';
I -= s;
L -- ;
}
cout << res << endl;
return 0;
}