QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#525612 | #8339. Rooted Tree | 333zhan | AC ✓ | 200ms | 237628kb | C++20 | 2.0kb | 2024-08-20 19:17:57 | 2024-08-20 19:17:58 |
Judging History
answer
/*
sum(x)表示对x集合求和
len(x)表示对x集合求数量
设T[i]表示操作i次后的树
B[i]表示i次操作后的叶节点集合
D[i]表示i次操作后的一个叶节点期望深度
则有D[i] = (sum (B[i - 1])) / (len (B[i - 1])) + 1
len(B[i - 1]) = (i - 1) * (k - 1) + 1
ans = M * sum (D[1] + ... + D[k])
sum (B[i]) = sum (B[i - 1]) - D[i] + M (D[i] + 1)
最终式子为E (sum (B[i])) = ((M - 1) * i + 1) / ((M - 1) * (i - 1) + 1) * E (sum (B[i - 1])) + M
*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1E9 + 9;
inline int read () {
int w = 1, s = 0; char ch = getchar ();
for (; ! isdigit (ch); ch = getchar ()) if (ch == '-') w = -1;
for (; isdigit (ch); ch = getchar ()) s = (s << 1) + (s << 3) + (ch ^ 48);
return s * w;
}
int power (int x, int p) {
int sum = 1;
for (; p; p >>= 1) {
if (p & 1) sum = sum * x % mod;
x = x * x % mod;
}
return sum;
}
int inv (int x) {
x %= mod;
return power (x, mod - 2);
}
void solve () {
int m, k;
cin >> m >> k;
vector <int> f (k + 1);
vector <int> g (k + 1);
g[0] = 1;
for (int i = 1; i <= k; i ++) {
g[i] = g[i - 1] * ((m - 1) * i + 1) % mod;
}
f[k] = inv (g[k]);
for (int i = k - 1; i >= 0; i --) {
f[i] = f[i + 1] * ((m - 1) * (i + 1) + 1) % mod;
}
for (int i = k; i >= 1; i --) {
f[i] = f[i] * g[i - 1] % mod;
}
vector <int> A (k + 1);
for (int i = 1; i <= k; i ++) {
A[i] = (((m - 1) * i + 1) % mod * f[i - 1] % mod * A[i - 1] + m) % mod;
}
int ans = 0;
for (int i = 0; i < k; i ++) {
ans += m * (A[i] * f[i] % mod + 1);
ans %= mod;
}
cout << ans << '\n';
}
signed main () {
ios::sync_with_stdio (false);
cin.tie (nullptr);
int T = 1;
// cin >> T;
// T = read ();
while (T --) {
solve ();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3588kb
input:
6 2
output:
18
result:
ok 1 number(s): "18"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3776kb
input:
2 6
output:
600000038
result:
ok 1 number(s): "600000038"
Test #3:
score: 0
Accepted
time: 12ms
memory: 17528kb
input:
83 613210
output:
424200026
result:
ok 1 number(s): "424200026"
Test #4:
score: 0
Accepted
time: 125ms
memory: 160488kb
input:
48 6713156
output:
198541581
result:
ok 1 number(s): "198541581"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3768kb
input:
1 111
output:
6216
result:
ok 1 number(s): "6216"
Test #6:
score: 0
Accepted
time: 147ms
memory: 174328kb
input:
28 7304152
output:
457266679
result:
ok 1 number(s): "457266679"
Test #7:
score: 0
Accepted
time: 75ms
memory: 99300kb
input:
38 4101162
output:
232117382
result:
ok 1 number(s): "232117382"
Test #8:
score: 0
Accepted
time: 185ms
memory: 235712kb
input:
51 9921154
output:
340670552
result:
ok 1 number(s): "340670552"
Test #9:
score: 0
Accepted
time: 37ms
memory: 45356kb
input:
79 1801157
output:
620550406
result:
ok 1 number(s): "620550406"
Test #10:
score: 0
Accepted
time: 100ms
memory: 129952kb
input:
22 5417157
output:
457449071
result:
ok 1 number(s): "457449071"
Test #11:
score: 0
Accepted
time: 64ms
memory: 78600kb
input:
25 3210162
output:
36368303
result:
ok 1 number(s): "36368303"
Test #12:
score: 0
Accepted
time: 58ms
memory: 71484kb
input:
67 2919160
output:
935195555
result:
ok 1 number(s): "935195555"
Test #13:
score: 0
Accepted
time: 161ms
memory: 204876kb
input:
77 8613163
output:
482832472
result:
ok 1 number(s): "482832472"
Test #14:
score: 0
Accepted
time: 194ms
memory: 237580kb
input:
90 10000000
output:
275581651
result:
ok 1 number(s): "275581651"
Test #15:
score: 0
Accepted
time: 190ms
memory: 237628kb
input:
99 9999999
output:
126087169
result:
ok 1 number(s): "126087169"
Test #16:
score: 0
Accepted
time: 200ms
memory: 237568kb
input:
100 10000000
output:
451590067
result:
ok 1 number(s): "451590067"
Extra Test:
score: 0
Extra Test Passed