さまざまな国のさまざまな映画を上映する映画祭があるとします。ここで、参加者は重複しない映画をできるだけ多く鑑賞したいと考えており、私たちは参加者が参加できる映画の数を把握できるように支援する必要があります。
次のメンバーを含む構造 Movie があります:
次のメンバーで構成されたフェスティバルという構造もあります:
Festival オブジェクトを作成して初期化する必要があります。このオブジェクトには 2 つの配列 'timeBegin' と 'duration' が含まれており、それぞれ複数の映画の開始時刻と継続時間が含まれます。整数 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
以上が映画祭の参加者がフルで鑑賞できる映画の数を計算する C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。