问题描述
输入输出
C++代码(含注释)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll T;
cin >> T;
while(T--) {
ll n, m, k;
cin >> n >> m >> k;
ll res = 1;//每个节点对应的子树至少包含它自己
//+1是为了将根结点计算在内
ll left = (k - 1) * m + 1;//k结点前面结点所含的结点数
ll right = k * m + 1;//k结点前面结点和k结点本身所含的结点数
//一层层往下模拟
while(right <= n) {
res += right - left;
left = left * m + 1;
right = right * m + 1;
}
//特殊情况:最后一个结点不是满的
if(left < n && n < right) {
res += n - left;
}
cout << res << endl;
}
return 0;
}