C++のテレビ番組
テレビ番組のリスト、期間の別のリスト、および整数kがあるとします。ここでは、shows[i]とduration[i]は、i番目が視聴した名前と期間を示しています。人、私たちはk個の最も視聴された番組の合計視聴時間を見つけなければなりません。
つまり、入力が番組のようなものである場合:["Castle Play"、 "Fairy Tale Series"、 "Castle Play"、 "Jerry Mouse"、 "Rich Boy"]、期間:[6、4 、6、14、5]およびk =2の場合、出力は26になります。
これを解決するには、次の手順に従います-
-
1つのマップを定義するm
-
n:=vのサイズ
-
初期化i:=0の場合、i
-
m [v [i]]:=m [v [i]] + d [i]
-
-
配列arrを定義する
-
キーと値のペアごとに、m
のそれ-
arrの最後にその値を挿入します
-
-
配列arrを逆の順序でソートします
-
ret:=0
-
初期化i:=0の場合、i
-
ret:=ret + arr [i]
-
-
retを返す
理解を深めるために、次の実装を見てみましょう-
例
#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
-
C++でのリスのシミュレーション
木、リス、そしていくつかのナッツがあります。位置は、2Dグリッドのセルで表されます。あなたの目標は、リスがすべてのナッツを集めて、それらを1つずつ木の下に置くための最小距離を見つけることです。リスは一度に最大で1つのナットしかとることができず、隣接するセルに向かって上下左右の4つの方向に移動できます。距離は移動回数で表されます。 したがって、入力が高さ:5幅:7木の位置:[2,2]リス:[4,4]ナッツ:[[3,0]、[2,5]]の場合、出力は12になります。 、 これを解決するには、次の手順に従います- 関数calc()を定義します。これには、x1、y1、x2、y2、が必要で
-
C++の長方形エリアII
(軸に沿った)長方形のリストがあるとします。ここで、各rectangle [i] ={x1、y1、x2、y2}です。ここで、(x1、y1)は左下隅のポイントであり、(x2、y2)は右上隅のポイントです。 i番目の長方形。 平面内のすべての長方形でカバーされる総面積を見つける必要があります。答えは非常に大きい可能性があるため、モジュロ10 ^ 9+7を使用できます。 したがって、入力が次のような場合 その場合、出力は6になります。 これを解決するには、次の手順に従います- m =10 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 r