Computer >> Máy Tính >  >> Lập trình >> C ++

Yêu cầu số người chơi tối thiểu để thắng trò chơi bằng C ++

Tuyên bố vấn đề

Đưa ra N câu hỏi và K lựa chọn cho mỗi câu hỏi, trong đó 1 <=N <=1000000000 và 1 <=K <=1000000000. Nhiệm vụ là xác định tổng số người chơi đã thử câu hỏi thứ i cho tất cả 1 <=i <=k để giành chiến thắng trong trò chơi dù sao. Bạn phải giảm thiểu tổng số người chơi và xuất nó theo mô-đun 109 + 7.

Xin lưu ý rằng bất kỳ câu trả lời sai nào đều dẫn đến việc loại bỏ người chơi

Ví dụ

Nếu N =5 và K =2 thì câu trả lời là 62.

Thuật toán

  • Để giải quyết N câu hỏi K người chơi là cần thiết.
  • Để giải quyết (N-1) câu hỏi người chơi K2 là cần thiết.
  • Tương tự, di chuyển trở đi, để giải quyết 1 st câu hỏi cần người chơi KN.
  • Vì vậy, vấn đề của chúng ta chỉ là việc tìm tổng các thuật ngữ GP K + K 2 +… + KN bằng:K (K n -1) / K -1

Ví dụ

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

Đầu ra

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau -

Minimum pairs = 62