Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++로 된 TV 프로그램


TV 프로그램 목록과 다른 재생 시간 목록, 정수 k가 있다고 가정하고 여기에서 show[i]를 표시하고 duration[i]는 i번째 사용자가 시청한 이름과 재생 시간을 표시합니다. 사람, 우리는 가장 많이 본 k 프로그램의 총 시청 시간을 찾아야 합니다.

따라서 입력이 다음과 같은 경우:["캐슬 플레이", "동화 시리즈", "캐슬 플레이", "제리 마우스", "리치 보이"], 지속 시간:[6, 4 , 6, 14, 5] 및 k =2이면 출력은 26이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 하나의 맵 정의

  • n :=v의 크기

  • initialize i :=0의 경우, i

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

  • 배열 arr 정의

  • 각 키-값 쌍에 대해 m

    • arr의 끝에 값을 삽입

  • arr 배열을 역순으로 정렬

  • ret :=0

  • initialize i :=0의 경우, i

    • 렛 :=렛 + arr[i]

  • 리턴 렛

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

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

입력

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

출력

26