YUTUc++game 2023-12-03 15:13 采纳率: 0%
浏览 14

半小时内告诉我答案才给钱

题目描述 新学期开始啦!少不了的一件事自然就是分配同桌 小胡的班级里有 n 个男生和 n个女生,男女生坐在一起,正好分成 n 对同桌 而为了促进同学们的学习进步,小胡决定根据每个同学的成绩情况进行分配同桌 首先小胡收集了每个同学的平均成绩,第 i 个男生的成绩为b[i] ,第 i 个女生的成绩为g[j] 如果由第 i个男生和第 j 个女生组成同桌,那么这一对同桌的成绩为 b[i]+g[j] 当分配完 n 对同桌以后,成绩最高的那一对同桌的成绩将代表这一次同桌分配方案的分配度 小胡认为,分配度越小,这一组分配方案越好,现在小胡想知道,最小的分配度是多少? 输入格式 第一行一个整数 n表示男女生人数。 接下来每行包含两个整数 b[i] 和 g[i]分别表示第 i 个男生和第 i 个女生的成绩。 输出格式 输出共 n 行,请计算每新增一对男女生时的最小分配度。c++

  • 写回答

3条回答 默认 最新

  • 电网论文源程序 2023-12-03 15:58
    关注

    这是一个求解同桌分配度的问题,可以通过对成绩进行排序,然后逐步计算分配度的方式来解决。以下是对应的C++代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        vector<pair<int, int>> scores;  // 存储成绩的向量,每个元素是一个pair,分别表示男生和女生的成绩
    
        // 输入成绩
        for (int i = 0; i < n; ++i) {
            int bi, gi;
            cin >> bi >> gi;
            scores.push_back({bi, gi});
        }
    
        // 按男生和女生的成绩之和排序
        sort(scores.begin(), scores.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
            return a.first + a.second < b.first + b.second;
        });
    
        int min_allocation = scores[0].first + scores[0].second;  // 初始时,最小分配度为第一对同桌的成绩之和
    
        // 逐步计算最小分配度并输出
        for (int i = 1; i < n; ++i) {
            min_allocation = max(min_allocation, scores[i].first + scores[i - 1].second);
            cout << min_allocation << endl;
        }
    
        return 0;
    }
    
    
    

    这段代码首先按照男生和女生的成绩之和对同学们进行排序,然后逐步计算每新增一对男女生时的最小分配度,并输出结果。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月3日