题目描述寒假你决定收看若干电视节目电视节目开始和结束时间表示为 aibi其中 ai bi为整数由于你每看一个电视节目收获值相同因此决定优先收看持续时间更短的节目如果持续时间都相同那么你优先收看开始时间早的否则收看编号靠前的。请你按输入顺序给节目编号输出排序后的编号。。c++代码
#include <iostream>
#include <vector>
#include <algorithm>
// 定义电视节目结构体
struct Program {
int start; // 开始时间
int end; // 结束时间
int index; // 编号
// 构造函数
Program(int s, int e, int i) : start(s), end(e), index(i) {}
};
// 比较函数,用于排序
bool cmp(Program& p1, Program& p2) {
// 持续时间短的排在前面
if (p1.end - p1.start != p2.end - p2.start) {
return p1.end - p1.start < p2.end - p2.start;
}
// 如果持续时间相同,开始时间早的排在前面
else if (p1.start != p2.start) {
return p1.start < p2.start;
}
// 如果开始时间也相同,编号小的排在前面
else {
return p1.index < p2.index;
}
}
std::vector<int> sortPrograms(std::vector<std::pair<int, int>>& programs) {
std::vector<int> result;
// 构建电视节目数组
std::vector<Program> programList;
for (int i = 0; i < programs.size(); i++) {
programList.push_back(Program(programs[i].first, programs[i].second, i + 1));
}
// 按照比较函数进行排序
std::sort(programList.begin(), programList.end(), cmp);
// 将排序后的编号加入结果数组
for (int i = 0; i < programList.size(); i++) {
result.push_back(programList[i].index);
}
return result;
}
int main() {
int n;
std::cin >> n;
std::vector<std::pair<int, int>> programs;
for (int i = 0; i < n; i++) {
int start, end;
std::cin >> start >> end;
programs.push_back(std::make_pair(start, end));
}
std::vector<int> result = sortPrograms(programs);
// 输出排序后的编号
for (int i = 0; i < result.size(); i++) {
std::cout << result[i] << " ";
}
std::cout << std::endl;
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/hDFU 著作权归作者所有。请勿转载和采集!