ホームページ >バックエンド開発 >C++ >OTT サービスのサブスクリプションに必要な最低金額を見つけるための C++ プログラム

OTT サービスのサブスクリプションに必要な最低金額を見つけるための C++ プログラム

WBOY
WBOY転載
2023-09-07 23:37:02737ブラウズ

OTT サービスのサブスクリプションに必要な最低金額を見つけるための C++ プログラム

電気通信事業者が、固定価格 k 米ドルで n の OTT コンテンツ プロバイダーへのアクセスを提供する「オールインワン」と呼ばれるサービスを開始するとします。さて、OTT プラットフォームに直接サブスクライブする必要がある場合、各プラットフォームに個別の料金を支払わなければなりません。すべてのプラットフォームをすべての月にサブスクライブする必要はないため、サービスをコスト効率よく使用する方法を見つける必要があります。配列 start_month で指定されたプラットフォーム i のサービスの開始月と、配列 end_month で指定された終了月が必要です。プラットフォームを購読するために必要な価格は、配列price[i]で指定されます。要件に従ってすべてのプラットフォームを購読するために支払う必要がある最低金額を見つける必要があります。

入力が n = 3、k = 10、start_month = {1, 2, 1}、end_month = {3, 3, 2}、price = {5, 7, 8} のような場合, その場合、出力は 30 になります。

We need to subscription to the service for 3 months.

最初の 1 か月間は、プラットフォーム 1 と 3 にサブスクライブする必要があります。料金はそれぞれ 5 8 = 13 ドルですが、「オールインワン」パッケージの場合は 10 米ドルのみです。同様に、2 か月目には 3 つすべてが必要となり、合計コストは 20 ドルになります。しかし、私たちはそれら 3 つに 10 ドルを支払いました。 3 か月目では、サブスクリプションの合計費用は 12 ドルになりますが、支払うのは 10 ドルだけです。

したがって、合計コストは 10 10 10 = 30 となります。

手順

この問題を解決するには、次の手順に従います-

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

理解を深めるために、次の実装を見てみましょう-

#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;
}

入力

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

出力

30

以上がOTT サービスのサブスクリプションに必要な最低金額を見つけるための C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。