~cpp #include <iostream> #include <math.h> using namespace std; unsigned int table[501][501]; unsigned int temp_table[2][501]; unsigned int full[10]; int calculate(int level, int time) { int value = temp_table[level%2][time]; if(level > time) value = pow(2,time)-1; return value; } void process() { int i, j, height, pre_height, time; for(i = 1; i <=500; i++) { table[1][i] = i; temp_table[1%2][i]= i; } for(i = 2; i < 10; i++) { height = pow(2,i) -1; full[i] = height; table[i][height] = i; temp_table[i%2][i] = height; for(time = i +1; height <500 ; time++) { pre_height = height; height = time; for(j = 1; j < time; j++) height += calculate(i-1,j); for(j = pre_height +1; j <= height && j <=500 ; j++) table[i][j] = time; temp_table[i%2][time] = height; } } } int main() { int height, safe, testnum, i; process(); cin >> testnum; for(i = 0; i < testnum; i++) { cin >> height >> safe; if(table[safe][height]) cout << table[safe][height] << endl; else { for(int j = 2; j < 10; j++) { if(full[j] > height) break; } cout << j << endl; } } return 0; }