QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#525612#8339. Rooted Tree333zhanAC ✓200ms237628kbC++202.0kb2024-08-20 19:17:572024-08-20 19:17:58

Judging History

你现在查看的是最新测评结果

  • [2024-08-20 19:17:58]
  • 评测
  • 测评结果:AC
  • 用时:200ms
  • 内存:237628kb
  • [2024-08-20 19:17:57]
  • 提交

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

Details

Tip: Click on the bar to expand more detailed information

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