1 条题解

  • 0
    @ 2026-2-2 14:32:05
    // [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
    上传者