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

C++でゲームに勝つために必要な最小プレーヤー


問題の説明

1 <=N<=1000000000および1<=K <=1000000000の場合、N個の質問と各質問にK個のオプションが与えられます。タスクは、すべての1 <=i<に対してi番目の質問を試みたプレーヤーの総数を決定することです。 =とにかくゲームに勝つためのk。プレーヤーの総数の合計を最小化し、109+7を法として出力する必要があります。

間違った答えはプレーヤーの排除につながることに注意してください

N=5およびK=2の場合、答えは62です。

アルゴリズム

  • N th を解決するには 質問Kプレーヤーが必要です。
  • (N-1)を解決するには th 質問K2プレーヤーが必要です。
  • 同様に先に進み、1 st を解決します 質問KNプレーヤーが必要です。
  • したがって、問題はGP項の合計K + K 2 を見つけることになります。 +…+KNは次の値に等しくなります:K(K n -1)/ K -1

#include <iostream>
#include <cmath>
#define MOD 1000000007
using namespace std;
long long int power(long long a, long long b) {
   long long res = 1;
   while (b) {
      if (b & 1) {
         res = res * a;
         res = res % MOD;
      }
      b = b / 2;
      a = a * a;
      a = a % MOD;
   }
   return res;
}
long long getMinPlayer(long long n, long long k) {
   long long num = ((power(k, n) - 1) + MOD) % MOD;
   long long den = (power(k - 1, MOD - 2) + MOD) % MOD;
   long long ans = (((num * den) % MOD) * k) % MOD;
   return ans;
}
int main() {
   long long n = 5, k = 2;
   cout << "Minimum pairs = " << getMinPlayer(n, k) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum pairs = 62

  1. 敵を倒すために必要な操作の最小数を見つけるためのC++プログラム

    主人公がナイフを使って敵を倒すビデオゲームをプレイしているとします。主人公はナイフを使って敵を斬ったり、敵に向かって投げたりすることができます。主人公がナイフを投げた場合、それを再び取得することはできません。ナイフiによって与えられるダメージは、各要素が{slash、throw}の形式である配列knivesで与えられます。 「スラッシュ」とは、そのナイフで敵を斬ることによって敵に与えられるダメージを意味し、「投げる」とは、その特定のナイフを投げることによって敵に与えられるダメージを意味します。斬撃は無制限に行うことができますが、ナイフは一度しか投げることができません。さて、体力hの敵が現れます

  2. C++で対戦相手を捕まえるために必要な最小ステップ数を見つけるためのプログラム

    [u、v]の形式のツリーエッジのリストがあると仮定します。これは、uとvの間に無向エッジがあることを示します。また、xとyの2つの値があります。ノードxにいて、対戦相手がノードyにいる場合。最初のラウンドでは移動し、次のラウンドでは対戦相手が移動します。対戦相手は、ラウンドで移動しないことを選択できます。対戦相手を捕まえるのに必要な最小ラウンド数を見つける必要があります。 したがって、入力がedges =[[0、1]、[0、2]、[1、3]、[1、4]]、x =0、y =3のような場合、出力は3になります。最初と同じように、ノード0から1に移動します。その後、対戦相手は現在のノード3に留まり