1 条题解
-
0
// [1] 引入C++标准库头文件,包含输入输出、容器、算法等常用功能 #include<bits/stdc++.h> // [2] 使用std命名空间,简化标准库函数的调用 using namespace std; int main() { // [3] 定义核心变量:m为男生人数,n为女生人数,T为允许的身高差最大值 int m, n, T; cin >> m >> n >> T; // [4] 读取输入的人数和身高差阈值 // [5] 定义容器存储身高数据:boys存男生身高,girls存女生身高 vector<int> boys(m); // 初始化容量为m的男生身高数组 vector<int> girls(n); // 初始化容量为n的女生身高数组 // [6] 读取m个男生的身高并存入boys数组 for (int i = 0; i < m; i++) { cin >> boys[i]; } // [7] 读取n个女生的身高并存入girls数组 for (int i = 0; i < n; i++) { cin >> girls[i]; } // [8] 贪心算法前置操作:对身高升序排序 // 排序后可通过双指针从小到大匹配,保证分组数量最优 sort(boys.begin(), boys.end()); sort(girls.begin(), girls.end()); // [9] 定义双指针与结果变量:i指向当前男生,j指向当前女生,res记录成功分组数 int i = 0, j = 0, res = 0; // [10] 双指针遍历排序后的数组,寻找符合条件的男女组合 // 当任意一方遍历完所有元素时停止循环 while (i < m && j < n) { // [11] 若当前男女身高差在允许范围内,成功分组 if (abs(boys[i] - girls[j]) <= T) { res++; // 分组数加1 i++; // 移动男生指针,匹配下一个男生 j++; // 移动女生指针,匹配下一个女生 } // [12] 若当前男生身高过矮,无法匹配当前女生,尝试更高的男生 else if (boys[i] < girls[j]) { i++; } // [13] 若当前女生身高过矮,无法匹配当前男生,尝试更高的女生 else { j++; } } // [14] 输出最终的最大分组数 cout << res << endl; return 0; }
- 1
信息
- ID
- 1044
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者