สมมติว่ามีเทศกาลภาพยนตร์ที่จัดแสดงภาพยนตร์ต่างๆ จากประเทศต่างๆ ตอนนี้ ผู้เข้าร่วมต้องการชมภาพยนตร์จำนวนสูงสุดที่ไม่ทับซ้อนกัน และเราต้องช่วยพวกเขาค้นหาว่าสามารถชมภาพยนตร์ได้กี่เรื่อง
มีโครงสร้างภาพยนตร์ที่มีสมาชิกดังต่อไปนี้ -
- เวลาเริ่มต้นของภาพยนตร์
- ระยะเวลาของภาพยนตร์
- เวลาสิ้นสุดของภาพยนตร์
มีโครงสร้างอื่นเทศกาลที่มีสมาชิกดังต่อไปนี้ -
- จำนวนหนังในเทศกาล
- ประเภทภาพยนตร์ที่มีขนาดใกล้เคียงกับจำนวนภาพยนตร์ในเทศกาล
เราต้องสร้างและเริ่มต้นวัตถุ Festival ด้วย 'timeBegin' และ 'duration' สองอาร์เรย์ที่มีเวลาเริ่มต้นและระยะเวลาของภาพยนตร์หลายเรื่องตามลำดับ จำนวนเต็ม n หมายถึงจำนวนภาพยนตร์ทั้งหมด และนั่นก็ใช้ในการเริ่มต้นวัตถุด้วย เรายังใช้วัตถุนั้นในการคำนวณจำนวนภาพยนตร์ที่ผู้เข้าร่วมสามารถดูได้อย่างเต็มที่
ดังนั้น หากอินพุตเหมือนกับ timeBegin ={1, 3, 0, 5, 5, 8, 8}, ระยะเวลา ={3, 2, 2, 4, 3, 2, 3}, n =7 แล้วผลลัพธ์ จะเป็น 4
ผู้เข้าร่วมสามารถชมภาพยนตร์ได้ทั้งหมด 4 เรื่องในเทศกาลนั้นๆ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- สร้างภาพยนตร์ {
- กำหนดตัวแปรสมาชิกสามตัว timeBegin, Duration, timeEnd
- โอเวอร์โหลดโอเปอเรเตอร์ '<' ซึ่งจะทำให้ตัวแปรประเภทภาพยนตร์เป็นตัวแปรอื่น
- คืนเวลาสิ้นสุด
- คืนเวลาสิ้นสุด
- เทศกาลโครงสร้าง {
- กำหนดจำนวนสมาชิก
- กำหนดภาพยนตร์อาร์เรย์ที่มีรายการประเภทภาพยนตร์
- กำหนดฟังก์ชัน initialize() สิ่งนี้จะใช้เวลาอาร์เรย์ timeBegin และ timeEnd และ itger n.
- filmFestival :=เทศกาลใหม่
- จำนวนฟิล์มเฟสติวัล :=นับ
- สำหรับการเริ่มต้น i :=0 เมื่อฉัน <นับ อัปเดต (เพิ่ม i ขึ้น 1) ทำ −
- temp :=วัตถุใหม่ประเภท Movie
- timeBegin ของ temp:=timeBegin[i]
- ระยะเวลาของอุณหภูมิ:=ระยะเวลา[i]
- timeEnd of temp :=timeBegin[i] + ระยะเวลา[i]
- ใส่ temp ลงในภาพยนตร์อาร์เรย์ของ filmFestival
- คืนฟิล์มFestival
- กำหนดฟังก์ชัน Solve() ซึ่งจะใช้ fest แบบแปรผันของประเภท Festival
- res :=0
- เรียงลำดับภาพยนตร์ของเทศกาล
- หมดเวลา :=-1
- สำหรับการเริ่มต้น i :=0 เมื่อ i
นับ อัปเดต (เพิ่ม i ขึ้น 1) ทำ − - ถ้า timeBegin ของภาพยนตร์[i] ของ fest>=timeEnd แล้ว −
- (เพิ่มความละเอียดขึ้น 1)
- timeEnd :=timeEnd of movies[i] ของเทศกาล
- ถ้า timeBegin ของภาพยนตร์[i] ของ 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