Submission #19993

#TimeUsernameProblemLanguageResultExecution timeMemory
19993xdoju괄호 (kriii4_R)C++14
100 / 100
604 ms1084 KiB
#include <stdio.h>

const int MOD = 1000000007;

int mul(int x, int y){ return (long long)x * y % MOD; }

int power(int x, int y){
  if(y == 0) return 1;
  int r = power(x, y / 2);
  r = mul(r, r);
  if(y % 2 == 1) r = mul(r, x);
  return r;
}

int modinv(int x){ return power(x, MOD - 2); }

int main(){
  int N, K; scanf("%d%d", &N, &K);

  int ans = 0, v = power(K, N);

  for(int op = N; op >= 0; op--){
    int cl = N - op;
    if(cl > op) break;

    ans += v; ans %= MOD;

    v = mul(v, modinv(K));
    v = mul(v, N - cl * 2 - 1);
    v = mul(v, modinv(cl + 1));
    if(cl != 0){
      v = mul(v, N - cl + 1);
      v = mul(v, modinv(N - 2 * cl + 1));
    }
  }

  printf("%d\n", ans);
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...