สมมติว่ามีเทศกาลภาพยนตร์ที่จัดแสดงภาพยนตร์ต่างๆ จากประเทศต่างๆ ตอนนี้ ผู้เข้าร่วมต้องการชมภาพยนตร์จำนวนสูงสุดที่ไม่ทับซ้อนกัน และเราต้องช่วยพวกเขาค้นหาว่าสามารถชมภาพยนตร์ได้กี่เรื่อง
มีโครงสร้างภาพยนตร์ที่มีสมาชิกดังต่อไปนี้ -
- เวลาเริ่มต้นของภาพยนตร์
- ระยะเวลาของภาพยนตร์
- เวลาสิ้นสุดของภาพยนตร์
มีโครงสร้างอื่นเทศกาลที่มีสมาชิกดังต่อไปนี้ -
- จำนวนหนังในเทศกาล
- ประเภทภาพยนตร์ที่มีขนาดใกล้เคียงกับจำนวนภาพยนตร์ในเทศกาล
เราต้องสร้างและเริ่มต้นวัตถุ 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