Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình truyền hình bằng C ++


Giả sử chúng ta có một danh sách các chương trình truyền hình và một danh sách thời lượng khác và một số nguyên k, ở đây hiển thị [i] và thời lượng [i] hiển thị tên và thời lượng đã xem của thứ i người, chúng tôi phải tìm tổng thời lượng đã xem của k chương trình được xem nhiều nhất.

Vì vậy, nếu đầu vào giống như các chương trình:["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], thời lượng:[6, 4 , 6, 14, 5] và k =2, thì đầu ra sẽ là 26.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một bản đồ m

  • n:=kích thước của v

  • để khởi tạo i:=0, khi i

    • m [v [i]]:=m [v [i]] + d [i]

  • xác định một arr mảng

  • đối với mỗi cặp khóa-giá trị, nó là m

    • chèn giá trị của nó vào cuối arr

  • sắp xếp mảng arr theo thứ tự ngược lại

  • ret:=0

  • để khởi tạo i:=0, khi i

    • ret:=ret + arr [i]

  • trả lại ret

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<string>& v, vector<int>& d, int k) {
      map <string, int> m;
      int n = v.size();
      for(int i = 0; i < n; i++){
         m[v[i]] += d[i];
      }
      vector < int > arr;
      for(auto it : m){
         arr.push_back(it.second);
      }
      sort(arr.rbegin(), arr.rend());
      int ret = 0;
      for(int i = 0; i < k; i++){
         ret += arr[i];
      }
      return ret;
   }
};
int main(){
   vector<string> v = {"Castle Play", "Fairy Tale Series", "Castle
   Play", "Jerry Mouse", "Rich Boy"};
   vector<int> v1 = {6, 4, 6, 14, 5};
   Solution ob;
   cout << (ob.solve(v, v1, 2));
}

Đầu vào

{"Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse",
"Rich Boy"}, {6, 4, 6, 14, 5}, 2

Đầu ra

26