Rumah > pembangunan bahagian belakang > C++ > Program C++ untuk mencari jumlah minimum yang diperlukan untuk melanggan perkhidmatan OTT

Program C++ untuk mencari jumlah minimum yang diperlukan untuk melanggan perkhidmatan OTT

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2023-09-07 23:37:02
ke hadapan
770 orang telah melayarinya

Program C++ untuk mencari jumlah minimum yang diperlukan untuk melanggan perkhidmatan OTT

Andaikan operator telekom melancarkan perkhidmatan yang dipanggil "semua-dalam-satu" yang menyediakan akses kepada n pembekal kandungan OTT pada harga tetap sebanyak k USD. Sekarang, jika kami perlu melanggan platform OTT secara langsung, kami perlu membayar yuran berasingan untuk setiap platform. Kami tidak perlu melanggan setiap platform sepanjang bulan, jadi kami perlu mencari cara untuk menggunakan perkhidmatan mereka secara efektif. Kami memerlukan bulan permulaan perkhidmatan untuk platform yang saya berikan dalam array start_month dan bulan berakhir yang diberikan dalam array end_month. Harga yang diperlukan untuk melanggan platform diberikan dalam harga tatasusunan[i]. Kami perlu mengetahui jumlah minimum yang perlu kami bayar untuk melanggan semua platform mengikut keperluan kami.

Jadi jika input adalah seperti n = 3, k = 10, start_month = {1, 2, 1}, end_month = {3, 3, 2}, price = {5, 7, 8}, maka output akan menjadi 30

Kami perlu melanggan perkhidmatan selama 3 bulan.

Untuk bulan pertama, kami perlu melanggan platform 1 dan 3. Kos $5 + 8 = $13 setiap satu, tetapi dengan pakej "semua dalam satu" ia berharga $10 USD sahaja. Begitu juga, bulan kedua, kami memerlukan ketiga-tiganya, dengan jumlah kos $20. Tetapi kami membayar $10 untuk ketiga-tiga mereka. Pada bulan ketiga, jumlah kos langganan menjadi $12, tetapi kami hanya membayar $10.

Jadi, jumlah kos ialah 10 + 10 + 10 = 30.

Langkah

Untuk menyelesaikan masalah ini kami akan mengikuti langkah berikut -

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
Salin selepas log masuk

Contoh

Mari kita lihat pelaksanaan berikut untuk pemahaman yang lebih baik -

#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;
}
Salin selepas log masuk

Input

3, 10, {1, 2, 1}, {3, 3, 2}, {5, 7, 8}
Salin selepas log masuk

Output

30
Salin selepas log masuk

Atas ialah kandungan terperinci Program C++ untuk mencari jumlah minimum yang diperlukan untuk melanggan perkhidmatan OTT. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan