微软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; }
同学写的
浙公网安备 33010602011771号