用c++写:蛋糕为长方形矩阵,高为h,宽为w, 蛋糕切割机一次操作只能横着切下来一块蛋糕,或者竖着切一块蛋糕,并且不可在对切下来的那块进行切割,只能在被切割的蛋糕上继续操作。 横着切时,一个h*w的蛋糕,可以被切成x*w和(h-x)*w小块,竖着切时,可以被切成h*x和h*(w-x)的两小块 每个数据包含多个例子,第一行包含单个整数t(1<=t<=10^4)——表示测试样例数量,每个测试样例的第一行包含一个整数(1<=n<=2*10^5)获得的蛋糕数。 接下来n组数据包含两个整数a[i]和b[i](1<=a[i],b[i]<=10^6)表示蛋糕的高度和宽度。 n不超过2*10^5。 对于每个数据,第一行输出可能的结果数m接下来m行输出,最初蛋糕的高度和宽度
时间: 2024-03-12 20:46:21 浏览: 112
好的,以下是用 C++ 实现的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<pair<int, int>> cakes(n);
for (int i = 0; i < n; i++) {
cin >> cakes[i].first >> cakes[i].second;
}
vector<pair<int, int>> results;
for (int i = 0; i < n; i++) {
int h = cakes[i].first, w = cakes[i].second;
int cnt = 0;
if (h % 2 == 0) cnt++;
if (w % 2 == 0) cnt++;
results.push_back(make_pair(cnt + 1, h * w));
}
for (int i = 0; i < n; i++) {
cout << results[i].first << endl;
cout << cakes[i].first << " " << cakes[i].second << endl;
if (results[i].first == 2) {
int h = cakes[i].first, w = cakes[i].second;
if (h % 2 == 0) {
cout << h / 2 << " " << w << endl;
}
if (w % 2 == 0) {
cout << h << " " << w / 2 << endl;
}
}
}
}
return 0;
}
```
首先,我们输入测试样例数量 t。然后,使用 while 循环来处理每个测试样例。每个测试样例第一行输入获得的蛋糕数 n,接下来 n 行输入每个蛋糕的高度和宽度。
接着,我们使用一个 vector 来记录每个蛋糕的可能切割结果数量和初始面积。对于一个蛋糕,如果它的高度或宽度为偶数,则它可以被切成两块,否则只能切成一块。因此,我们将可能切割结果数量设为 cnt + 1,其中 cnt 表示宽度和高度中偶数的数量。
接下来,我们输出每个蛋糕的可能切割结果数量和初始高度和宽度。如果可能切割结果数量为 2,则我们需要输出切割后的两块蛋糕的尺寸。我们可以根据高度和宽度中的偶数来判断哪个方向可以切割成两块,并输出两块蛋糕的尺寸。
最后,我们通过 while 循环处理所有的测试样例。
阅读全文