Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình TV trong C++


Cho danh sách các chương trình TV, danh sách thời lượng tương ứng và số nguyên k. shows[i] và duration[i] lần lượt là tên và thời lượng người thứ i xem. Cần tìm tổng thời lượng của k chương trình được xem nhiều nhất.

Ví dụ: shows: ["Castle Play", "Fairy Tale Series", "Castle Play", "Jerry Mouse", "Rich Boy"], duration: [6, 4, 6, 14, 5], k = 2. Kết quả là 26.

Các bước giải quyết:

  • Dùng map để cộng dồn thời lượng cho mỗi chương trình.
  • Đưa các giá trị thời lượng vào mảng arr.
  • Sắp xếp arr giảm dần.
  • Tổng k phần tử đầu tiên của arr.

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