### 分析
1. 读取测试用例的数量 \( T \)。
2. 对于每个测试用例,读取西瓜的大小 \( n \) 和 BM 一次能吃下的最大西瓜大小 \( k \)。
3. 实现一个函数来计算 BM 吃完西瓜所需的次数:
- 如果 \( n \leq k \),BM 可以一次吃完西瓜。
- 否则,递归地将西瓜分割,直到所有的西瓜块都小于等�� \( k \)。
4. 输出每个测试用例的结果。
### 伪代码
1. 读取 \( T \)。
2. 对于每个测试用例:
- 读取 \( n \) 和 \( k \)。
- 初始化一个计数器来记录 BM 吃西瓜的次数。
- 当 \( n > k \) 时:
- 如果 \( n \) 是偶数,将其分成两块大小相等的西瓜。
- 如果 \( n \) 是奇数,将其分成两块:一块大小为 \( n/2 \),另一块大小为 \( n/2 + 1 \)。
- 对于每块小于等于 \( k \) 的西瓜,增加计数器。
- 输出计数器的值。
### C++ 代码
#include <iostream>
#include <vector>
using namespace std;
int calculateEats(int n, int k) {
int eats = 0;
vector<int> pieces = {n};
while (!pieces.empty()) {
int current = pieces.back();
pieces.pop_back();
if (current <= k) {
eats++;
} else {
int half1 = current / 2;
int half2 = current - half1;
pieces.push_back(half1);
pieces.push_back(half2);
}
}
return eats;
}
int main() {
int T;
cin >> T;
vector<pair<int, int>> testCases(T);
for (int i = 0; i < T; ++i) {
cin >> testCases[i].first >> testCases[i].second;
}
for (const auto& testCase : testCases) {
int n = testCase.first;
int k = testCase.second;
cout << calculateEats(n, k) << endl;
}
return 0;
}