結果
| 問題 |
No.665 Bernoulli Bernoulli
|
| コンテスト | |
| ユーザー |
xuzijian629
|
| 提出日時 | 2018-09-11 01:29:05 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 336 ms / 2,000 ms |
| コード長 | 1,885 bytes |
| コンパイル時間 | 738 ms |
| コンパイル使用メモリ | 100,892 KB |
| 実行使用メモリ | 6,784 KB |
| 最終ジャッジ日時 | 2024-06-11 16:01:53 |
| 合計ジャッジ時間 | 7,423 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 15 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <chrono>
#include <random>
#include <functional>
#include <utility>
#include <cassert>
#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma comment(linker, "STACK:36777216")
using namespace std;
using i64 = int64_t;
constexpr i64 MOD = 1e9 + 7;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
using vi = vector<i64>;
using vvi = vector<vi>;
using vvvi = vector<vvi>;
using ii = pair<i64, i64>;
i64 fact[202020];
i64 factinv[202020];
i64 Ber[10001];
i64 modpow(i64 a, i64 n) {
if (n == 0) return 1;
if (n % 2 == 0) {
i64 t = modpow(a, n / 2);
return t * t % MOD;
}
return a * modpow(a, n - 1) % MOD;
}
i64 comb(int n, int r);
void make() {
fact[0] = 1;
for (int i = 1; i < 202020; i++) {
fact[i] = fact[i - 1] * i % MOD;
}
for (int i = 0; i < 202020; i++) {
factinv[i] = modpow(fact[i], MOD - 2);
assert(fact[i] * factinv[i] % MOD == 1);
}
Ber[0] = 1;
for (int i = 1; i < 10001; i++) {
i64 tmp = 0;
for (int j = 0; j < i; j++) {
tmp += comb(i + 1, j) * Ber[j];
tmp %= MOD;
}
Ber[i] = -1 * modpow(i + 1, MOD - 2) * tmp % MOD;
}
}
i64 comb(int n, int r) {
if (n < 0 || r < 0 || r > n) return 0;
return fact[n] * factinv[r] % MOD * factinv[n - r] % MOD;
}
int main() {
make();
i64 ans = 0;
i64 n, k;
cin >> n >> k;
for (int j = 0; j <= k; j++) {
ans += comb(k + 1, j) * Ber[j] % MOD * modpow((n + 1) % MOD, k + 1 - j) % MOD;
ans %= MOD;
}
ans *= modpow(k + 1, MOD - 2);
ans %= MOD;
cout << (ans + MOD) % MOD << endl;
}
xuzijian629