微软2014实习生及秋令营技术类职位在线测试-2.K-th string.cpp

#include <iostream>
#include <string>
#define N 35

using namespace std;


long long a[N][N] = {};

void init(){
    a[1][0] = a[1][1] = 1;
    for(int i = 2; i < N; i++)
        for(int j = 0; j <= i ; j++)
            a[i][j] = a[i-1][j-1] + a[i-1][j];
}



string f(int n, int m, int k){
    if ( a[n+m][m] < k) return "Impossible";

    long long rank = 0;
    int remOne = m;
    string str = "";

    for(int i = 0; i< n+m ; i++){
        if( remOne == 0){
            str += "0";
            continue;
        }
        if( a[n+m-i-1][remOne] + rank >= k ){
            str += "0";
        } else {
            str += "1";
            rank += a[n+m-i-1][remOne];
            remOne --;
        }
    }

    return str;

}

int main() {
    init();

    int t, n, m, k;

    cin >>t;
    while( t--){
        cin >> n >> m >> k;
        cout << f(n, m, k) <<endl;
    }


    return 0;
}

同学写的

posted on 2014-04-14 10:49  云在心  阅读(129)  评论(0)    收藏  举报

导航