
假设有一个电影节,展示来自不同国家的各种电影。现在,一个参与者想要参加尽可能多的不重叠的电影,我们需要帮助他们找出他们可以参加多少部电影。
有一个结构体 Movie,它有以下成员:
- 电影的开始时间。
- 电影的持续时间。
- 电影的结束时间。
还有一个结构体 Festival,它有以下成员:
- 电影节的电影数量。
- 一个类型为 Movie 的数组,其大小与电影节的电影数量相同。
我们需要创建并初始化一个 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 部电影。
为了解决这个问题,我们将按照以下步骤进行:
- 结构体 Movie {
- 定义三个成员变量 timeBegin、duration、timeEnd
- 重载运算符 '
- 返回 timeEnd
- 定义一个成员变量 count
- 定义一个包含 Movie 类型项的数组 movies
- filmFestival := 一个新的 Festival 对象
- filmFestival 的 count := count
- 对于初始化 i := 0,当 i
- temp := 一个新的 Movie 类型对象
- temp 的 timeBegin := timeBegin[i]
- temp 的 duration := duration[i]
- temp 的 timeEnd := timeBegin[i] + duration[i]
- 将 temp 插入到 filmFestival 的 movies 数组中
- res := 0
- 对 fest 的 movies 数组进行排序
- timeEnd := -1
- 对于初始化 i := 0,当 i count 时,更新 (将 i 增加 1),执行以下操作:
- 如果 fest 的 movies[i] 的 timeBegin >= timeEnd,则执行以下操作:
- (将 res 增加 1)
- timeEnd := fest 的 movies[i] 的 timeEnd
- 如果 fest 的 movies[i] 的 timeBegin >= timeEnd,则执行以下操作:
- 返回 res
示例
让我们看一下以下实现以更好地理解:
#includeusing namespace std; struct Movie { int timeBegin, duration, timeEnd; bool operator<(const Movie& another) const { return timeEnd < another.timeEnd; } }; struct Festival { int count; vector 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










