Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- int dp[32][32];
- char res[32];
- int main()
- {
- ifstream fin("kimbits.in");
- ofstream fout("kimbits.out");
- int N,L;
- long long I;
- fin>>N>>L>>I;
- //init
- for ( int i = 0 ;i<32 ;i++)
- {
- dp[i][0] = 1;
- dp[0][i] = 1;
- }
- //Dynamic Programming
- for (int i = 1 ; i<=N ;i++)
- {
- for ( int j =1 ;j<=L ;j++)
- {
- dp[i][j] = dp[i-1][j]+dp[i-1][j-1];
- }
- }
- //Cantor expansion ,tricky!!
- int k = 0;
- for (int i = N ; i >0 ;i--)
- {
- if (dp[i-1][L]>=I)
- {
- res[k++] = '0';
- }
- else if (dp[i-1][L]<I)
- {
- res[k++] = '1';
- I -= dp[i-1][L];
- //new Ith in the lower bits
- L--;
- //We have confirm there is one '1' ,So L--.
- }
- }
- fout<<res<<endl;
- fin.close();
- fout.close();
- return 0;
- }
Add Comment
Please, Sign In to add comment