Heim >Backend-Entwicklung >C++ >C++-Programm, um den Mindestbetrag zu ermitteln, der zum Abonnieren eines OTT-Dienstes erforderlich ist

C++-Programm, um den Mindestbetrag zu ermitteln, der zum Abonnieren eines OTT-Dienstes erforderlich ist

WBOY
WBOYnach vorne
2023-09-07 23:37:02737Durchsuche

C++-Programm, um den Mindestbetrag zu ermitteln, der zum Abonnieren eines OTT-Dienstes erforderlich ist

Angenommen, ein Telekommunikationsbetreiber führt einen Dienst namens „All-in-One“ ein, der Zugang zu n OTT-Inhaltsanbietern zu einem Festpreis von 100.000 USD bietet. Wenn wir nun OTT-Plattformen direkt abonnieren müssen, müssen wir für jede Plattform separate Gebühren zahlen. Wir müssen nicht alle Plattformen für alle Monate abonnieren, sondern müssen einen Weg finden, ihre Dienste kostengünstig zu nutzen. Wir benötigen den Startmonat des Dienstes für Plattform i, der im Array start_month angegeben ist, und den Endmonat, der im Array end_month angegeben ist. Der für das Abonnement der Plattform erforderliche Preis ist im Array „price[i]“ angegeben. Wir müssen den Mindestbetrag herausfinden, den wir zahlen müssen, um alle Plattformen gemäß unseren Anforderungen zu abonnieren.

Wenn die Eingabe also etwa n = 3, k = 10, Startmonat = {1, 2, 1}, Endmonat = {3, 3, 2}, Preis = {5, 7, 8} ist, dann ist die Ausgabe wird 30 sein

Wir müssen den Dienst für 3 Monate abonnieren.

Für den ersten Monat müssen wir die Plattformen 1 und 3 abonnieren. Kostet jeweils 5 $ + 8 = 13 $, aber mit dem „All-in-One“-Paket kostet es nur 10 USD. Ebenso benötigen wir im zweiten Monat alle drei, für einen Gesamtpreis von 20 $. Aber wir haben für diese drei 10 Dollar bezahlt. Im dritten Monat belaufen sich die Gesamtkosten des Abonnements auf 12 US-Dollar, wir zahlen jedoch nur 10 US-Dollar.

Daher betragen die Gesamtkosten 10 + 10 + 10 = 30.

Schritte

Um dieses Problem zu lösen, folgen wir den folgenden Schritten -

Define an array pairArray
for initialize i := 0, when i < n, update (increase i by 1), do:
   insert pair(start_month[i], price[i]) at the end of pairArray
   insert pair(end_month[i] + 1, -price[i]) at the end of pairArray
sort the array pairArray
pre := 0
c := 0
res := 0
for each element p in pairArray, do:
   day := first element of p - pre
   res := res + minimum of (k, c)
   c := c + second element of p
pre := first element of p
return res

Beispiel

Sehen wir uns zum besseren Verständnis die folgende Implementierung an -

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> G;
vector<int> res;

int solve(int n, int k, int start_month[], int end_month[], int price[]){
   vector<pair<int, int>> pairArray;
   for(int i = 0; i < n; i++) {
      pairArray.push_back(make_pair(start_month[i], price[i]));
      pairArray.push_back(make_pair(end_month[i] + 1, -price[i]));
   }
   sort(pairArray.begin(), pairArray.end());
   int pre = 0;
   int c = 0;
   int res = 0;
   for(auto p : pairArray) {
      int day = p.first - pre;
      res += min(k, c) * day;
      c += p.second; pre = p.first;
   }
   return res;
}
int main() {
   int n = 3, k = 10, start_month[] = {1, 2, 1}, end_month[] = {3, 3, 2}, price[] = {5, 7, 8};
   cout<< solve(n, k, start_month, end_month, price);
   return 0;
}

Eingabe

3, 10, {1, 2, 1}, {3, 3, 2}, {5, 7, 8}

Ausgabe

30

Das obige ist der detaillierte Inhalt vonC++-Programm, um den Mindestbetrag zu ermitteln, der zum Abonnieren eines OTT-Dienstes erforderlich ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen