ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#200490 | #27. B | Anonyme | 100 | 430ms | 24072kb | C++11 | 2.1kb | 2024-01-04 09:03:29 | 2024-01-04 12:05:57 |
answer
#include <bits/stdc++.h>
using namespace std;
#define QwQ330AwA return 0
#define ll long long
const int mod = 1e9 + 7;
const int N = 3035;
int n, k, q;
ll f[N], g[N], a[N], b[N];
ll inv[N];
ll ksm(ll a, int b) {
ll ans = 1;
for (; b; b >>= 1, a = a * a % mod) {
if (b & 1) ans = ans * a % mod;
}
return ans;
}
ll s[N][N];
ll fac[N];
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k >> q;
if (n <= 3005) {
ll ans = 0;
fac[0] = 1;
for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;
inv[n] = ksm(fac[n], mod - 2);
for (int i = n; i >= 1; i--) inv[i - 1] = inv[i] * i % mod;
ll now = 0;
for (int i = 1; i <= n; i++) {
now = (now + ksm(i, k)) % mod;
ans = (ans + now * ksm(q, i) % mod * fac[n] % mod * inv[i] % mod * inv[n - i] % mod) % mod;
}
cout << ans;
return 0;
}
f[0] = 1;
for (int i = 1; i <= k + 2; i++) inv[i] = ksm(mod - i, mod - 2);
for (int i = 1; i <= k + 2; i++) {
for (int j = k + 2; j >= 0; j--) {
f[j + 1] = (f[j + 1] + f[j]) % mod;
f[j] = f[j] * (mod - i) % mod;
}
}
ll xs = 0;
for (int i = 1; i <= k + 2; i++) {
g[0] = f[0];
for (int j = 0; j <= k + 1; j++) {
g[j] = g[j] * inv[i] % mod;
g[j + 1] = (f[j + 1] - g[j] + mod) % mod;
}
xs += ksm(i, k);
xs %= mod;
ll iv = 1;
for (int j = 1; j <= k + 2; j++) {
if (i == j) continue;
iv = iv * (i - j) % mod;
iv = (iv + mod) % mod;
}
iv = ksm(iv, mod - 2) % mod;
for (int j = 0; j <= k + 1; j++) {
a[j] = (a[j] + g[j] * xs % mod * iv % mod) % mod;
}
}
s[0][0] = 1;
for (int i = 1; i <= k + 1; i++) {
for (int j = 0; j <= i; j++) {
s[i][j] = s[i - 1][j] * j % mod;
if (j) s[i][j] = (s[i][j] + s[i - 1][j - 1]) % mod;
}
}
for (int i = 0; i <= k + 1; i++) {
for (int j = i; j <= k + 1; j++) {
b[i] = (b[i] + a[j] * s[j][i] % mod) % mod;
}
}
ll ans = 0;
ll down = 1;
for (int i = 0; i <= min(n, k + 1); i++) {
ans = ans + down * b[i] % mod * ksm(q, i) % mod * ksm(q + 1, n - i) % mod;
ans %= mod;
down = down * (n - i) % mod;
}
cout << ans;
QwQ330AwA;
}
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 1ms
memory: 1256kb
input:
2 2968 248085442
output:
53931179
result:
ok 1 number(s): "53931179"
Test #2:
score: 10
Accepted
time: 0ms
memory: 1256kb
input:
1 1262 725874701
output:
725874701
result:
ok 1 number(s): "725874701"
Test #3:
score: 10
Accepted
time: 0ms
memory: 1260kb
input:
6 1899 847871770
output:
120581092
result:
ok 1 number(s): "120581092"
Test #4:
score: 10
Accepted
time: 79ms
memory: 15420kb
input:
548444 1452 262477339
output:
500837612
result:
ok 1 number(s): "500837612"
Test #5:
score: 10
Accepted
time: 35ms
memory: 9300kb
input:
849214 1004 553545924
output:
700237000
result:
ok 1 number(s): "700237000"
Test #6:
score: 10
Accepted
time: 0ms
memory: 1280kb
input:
857801894 0 660567989
output:
78674556
result:
ok 1 number(s): "78674556"
Test #7:
score: 10
Accepted
time: 142ms
memory: 24072kb
input:
845054185 1951 194160742
output:
350980457
result:
ok 1 number(s): "350980457"
Test #8:
score: 10
Accepted
time: 23ms
memory: 7948kb
input:
404918682 886 379769093
output:
746456151
result:
ok 1 number(s): "746456151"
Test #9:
score: 10
Accepted
time: 94ms
memory: 17364kb
input:
7290700 1575 457614788
output:
251875400
result:
ok 1 number(s): "251875400"
Test #10:
score: 10
Accepted
time: 56ms
memory: 12396kb
input:
854360230 1245 204915831
output:
107791581
result:
ok 1 number(s): "107791581"
Extra Test:
score: 0
Extra Test Passed