다양한 국가의 다양한 영화를 선보이는 영화제가 열리고 있다고 가정해 보겠습니다. 이제 참석자는 서로 겹치지 않는 최대 수의 영화에 참석하기를 원하며 우리는 그들이 참석할 수 있는 영화를 찾을 수 있도록 도와야 합니다.
다음 멤버가 있는 구조 Movie가 있습니다. -
- 영화의 시작 시간입니다.
- 영화의 길이입니다.
- 영화의 종료 시간입니다.
다음 구성원과 함께 또 다른 구조의 축제가 있습니다 -
- 영화제의 영화 수.
- 영화제의 영화 수와 크기가 비슷한 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편의 영화를 관람할 수 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 영화 구조 {
- 3개의 멤버 변수 timeBegin, duration, timeEnd 정의
- '<' 연산자를 오버로드하면 Movie 유형 변수가 사용됩니다.
- return timeEnd
- return timeEnd
- 구조체 축제 {
- 회원 수 정의
- 영화 유형 항목을 포함하는 배열 영화 정의
- initialize() 함수를 정의합니다. 이것은 timeBegin 및 timeEnd 배열과 n.
- filmFestival :=새로운 축제 대상
- filmFestival 수 :=count
- 초기화 i의 경우:=0, i <개수, 업데이트(i를 1만큼 증가), 수행 -
- temp :=Movie 유형의 새 개체
- temp의 timeBegin:=timeBegin[i]
- 온도 지속 시간:=지속 시간[i]
- timeEnd of temp :=timeBegin[i] + duration[i]
- filmFestival의 배열 영화에 임시 삽입
- 반품 필름 페스티벌
- solve() 함수를 정의하면 Festival 유형의 가변 축제가 필요합니다.
- res :=0
- 축제의 배열 영화 정렬
- timeEnd :=-1
- 초기화 i:=0의 경우, i
카운트, 업데이트(i 1만큼 증가), 수행 - - if timeBegin of movies[i] of fest>=timeEnd이면 -
- (해상도 1 증가)
- timeEnd :=영화 축제[i]의 timeEnd
- if timeBegin of movies[i] of fest>=timeEnd이면 -
- 반환 결과
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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