Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อดูว่าผู้เข้าร่วมสามารถชมภาพยนตร์ได้ทั้งหมดกี่เรื่องในเทศกาลภาพยนตร์


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

มีโครงสร้างภาพยนตร์ที่มีสมาชิกดังต่อไปนี้ -

  • เวลาเริ่มต้นของภาพยนตร์
  • ระยะเวลาของภาพยนตร์
  • เวลาสิ้นสุดของภาพยนตร์

มีโครงสร้างอื่นเทศกาลที่มีสมาชิกดังต่อไปนี้ -

  • จำนวนหนังในเทศกาล
  • ประเภทภาพยนตร์ที่มีขนาดใกล้เคียงกับจำนวนภาพยนตร์ในเทศกาล

เราต้องสร้างและเริ่มต้นวัตถุ 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] ของเทศกาล
    • ผลตอบแทน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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