酷代码 AI
菜单
服务商

C++实现求解数组分组最大组数问题

```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; // 定义一个结构体来存储 x 和 y 的值 struct Pair { long long x; long long y; // 重载小于运算符,用于排序 bool operator<(const Pair& other) const { return x - y < other.x - other.y; } }; // 解决单个测试用例的函数 int solve(int n, vector<long long>& x, vector<long long>& y) { vector<Pair> pairs(n); // 将 x 和 y 的值存储到结构体数组中 for (int i = 0; i < n; ++i) { pairs[i].x = x[i]; pairs[i].y = y[i]; } // 对结构体数组进行排序 sort(pairs.begin(), pairs.end()); long long sumX = 0, sumY = 0; int count = 0; // 遍历排序后的数组 for (int i = 0; i < n; ++i) { sumX += pairs[i].x; sumY += pairs[i].y; // 当满足每组中 x 的总和不大于 y 的总和且元素数量至少为 2 时 if (sumX <= sumY && i >= 1) { count++; sumX = 0; sumY = 0; } } return count; } int main() { int t; cin >> t; while (t--) { int n; cin >> n; vector<long long> x(n), y(n); // 输入 x 数组 for (int i = 0; i < n; ++i) { cin >> x[i]; } // 输入 y 数组 for (int i = 0; i < n; ++i) { cin >> y[i]; } // 调用 solve 函数解决当前测试用例并输出结果 cout << solve(n, x, y) << endl; } return 0; } ``` 这段代码首先定义了一个 `Pair` 结构体来存储 `x` 和 `y` 的值,并重载了小于运算符,用于对结构体数组进行排序。`solve` 函数用于解决单个测试用例,它将 `x` 和 `y` 的值存储到结构体数组中,对数组进行排序,然后遍历数组,计算 `x` 和 `y` 的总和,当满足每组中 `x` 的总和不大于 `y` 的总和且元素数量至少为 2 时,将组数加 1,并重置总和。`main` 函数负责读取输入的测试用例数量和每个测试用例的信息,调用 `solve` 函数解决每个测试用例并输出结果。 ######[AI问答 | 684点数解答 | 2026-03-08 19:46:10]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]