
假设有一个电影节,展示来自不同国家的各种电影。现在,一个参与者想要参加尽可能多的不重叠的电影,我们需要帮助他们找出他们可以参加多少部电影。
有一个结构体 Movie,它有以下成员:
还有一个结构体 Festival,它有以下成员:
我们需要创建并初始化一个 Festival 对象,其中包含两个数组 'timeBegin' 和 'duration',它们分别包含多部电影的开始时间和持续时间。整数 n 表示电影的总数,也用于初始化对象。我们进一步使用该对象来计算参与者可以完整观看多少部电影。
立即学习“C++免费学习笔记(深入)”;
因此,如果输入是 timeBegin = {1, 3, 0, 5, 5, 8, 8},duration = {3, 2, 2, 4, 3, 2, 3},n = 7,那么输出将是 4
参与者可以在该电影节上完整观看 4 部电影。
为了解决这个问题,我们将按照以下步骤进行:
让我们看一下以下实现以更好地理解:
#include<bits/stdc++.h>
using namespace std;
struct Movie {
int timeBegin, duration, timeEnd;
bool operator<(const Movie& another) const {
return timeEnd < another.timeEnd;
}
};
struct Festival {
int count;
vector<Movie> movies;
};
Festival* initialize(int timeBegin[], int duration[], int count) {
Festival* filmFestival = new Festival;
filmFestival->count = count;
for (int i = 0; i < count; i++) {
Movie temp;
temp.timeBegin = timeBegin[i];
temp.duration = duration[i];
temp.timeEnd = timeBegin[i] + duration[i];
filmFestival->movies.push_back(temp);
}
return filmFestival;
}
int solve(Festival* fest) {
int res = 0;
sort(fest->movies.begin(), fest->movies.end());
int timeEnd = -1;
for (int i = 0; i < fest->count; i++) {
if (fest->movies[i].timeBegin >= timeEnd) {
res++;
timeEnd = fest->movies[i].timeEnd;
}
}
return res;
}
int main(int argc, char *argv[]) {
int timeBegin[] = {1, 3, 0, 5, 5, 8, 8};
int duration[] = {3, 2, 2, 4, 3, 2, 3};
Festival * fest;
fest = initialize(timeBegin,duration, 7);
cout << solve(fest) << endl;
return 0;
}int timeBegin[] = {1, 3, 0, 5, 5, 8, 8};
int duration[] = {3, 2, 2, 4, 3, 2, 3};
Festival * fest;
fest = initialize(timeBegin,duration, 7);4
以上就是C++程序,用于计算参与者在电影节上能完整观看多少部电影的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号