C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

学生からより多くの票を得るために最小kを見つけるためのC++コード


n個の要素を持つ配列Aがあるとします。学校にはn人の生徒がいて、それぞれが正確にk票を持っているので、すべての票を使用する必要があります。 2つのパーティがあります。 A [i]は、i番目の学生が最初のパーティにA [i]の票を与えたことを表します。これは、2番目のパーティがk-A[i]の票を獲得することを意味します。 2番目のパーティは、勝つようにkを設定したいと考えています。 kの可能な最小値は何になりますか。

したがって、入力がA =[2、2、3、2、2]の場合、最初のパーティは2 + 2 + 3 + 2 + 2 =11票を獲得しているため、出力は5になります。 k =5の場合、2番目の政党は3 + 3 + 2 + 3 + 3 =14票を獲得し、選挙に勝ちます。

ステップ

これを解決するには、次の手順に従います-

n := size of A
for initialize k := 0, when k < n, update (increase k by 1), do:
   x := A[k]
   m := maximum of m and x
   s := s + x
return maximum of m and (2 * s / n + 1)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int n = A.size(), k = 0, s = 0, m = 0;
   for (int k = 0; k < n; k++){
      int x = A[k];
      m = max(m, x);
      s += x;
   }
   return max(m, 2 * s / n + 1);
}
int main(){
   vector<int> A = { 2, 2, 3, 2, 2 };
   cout << solve(A) << endl;
}

入力

{ 2, 2, 3, 2, 2 }

出力

5

  1. C++のソースからkを超える長さのパスがあるかどうかを確認します

    コンセプト 与えられたグラフ、グラフ内のソース頂点、および数値k(ここでkは、ソース頂点と宛先頂点の間のグラフのパス長を示します)に関して、私たちのタスクは、開始する単純なパス(サイクルなし)があるかどうかを判断することです。指定されたソースから、他の頂点(つまり宛先)で終了します。グラフを以下に示します- 入力 Source s = 0, k = 64 出力 True 4があり、合計距離は68 kmで、64を超えています。 入力 Source s = 0, k = 70 出力 False 8)であるため、69を超える入力の場合は出力がfalseになります。 メソッド 重要なこ

  2. C ++で(x%k)*(x / k)==nとなるような最小のxを見つけます

    2つの正の整数nとkが与えられ、(x%k)*(x / k)がnと同じになるように、正の整数xを見つける必要があります。したがって、nとkがそれぞれ4と6の場合、出力は10になります。したがって、(10%6)*(10/6)=4です。 x%kの値は[1からk – 1]の範囲にあることがわかっているので(0は含まれません)ここで、nを除算する範囲で可能な整数を見つけるため、与えられた方程式は次のようになります。 * k)/(x%k)+(x%k) 例 #include<iostream> using namespace std; int minValue(int x, int y){ &