C++ 程序,用于确定参加者可以在电影节上完整观看多少部电影
假设有一个电影节正在进行,展示来自不同国家的各种电影。现在,与会者想要观看最大数量的彼此不重叠的电影,我们必须帮助他们找出他们可以观看的电影数量。
有一个结构电影具有以下成员-
电影开始的时间。
电影的时长。
电影的结束时间。
有以下成员的另一个结构节-
电影节上的电影数量。
Movie类型的数组,其大小与电影节的电影数量相似。
我们必须使用两个数组“timeBegin”和“duration”创建并初始化一个Festival对象,它们分别包含几部电影的开始时间和持续时间。整数n表示电影的总数,也用于初始化对象。我们进一步使用该对象来计算与会者可以完整观看的电影数量。
所以,如果输入像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