赢得C ++游戏所需的最低玩家人数
问题陈述
给定N个问题,每个问题有K个选项,其中1<=N<=1000000000和1<=K<=1000000000。任务是确定所有1<=i<=k以赢得游戏。您必须最小化播放器总数的总和,并以109+7模输出。
请注意,任何错误答案都会导致玩家被淘汰
示例
如果N=5且K=2,则答案为62。
算法
为了解决第N个问题,需要K个玩家。
为了解决第(N-1)个问题,需要K2玩家。
同样地,要解决第一个问题,需要KN玩家。
因此,我们的问题简化为找到GP项之和K+K2+…+KN等于:K(Kn-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