1 条题解

  • 0
    @ 2026-6-11 20:45:43

    显然 kk 次查询独立,最后乘上 kk 即可。

    不难发现查询一个元素的访问数等于同一条链中排在它前面的元素个数加上 11,这个加 11 可以在最后直接加。

    不难发现将元素插到链头或链尾,不妨改为插在链尾,那么排在第 ii 个元素前面的元素个数期望是:

    ∑j=1najn\dfrac{\displaystyle\sum _{j = 1} ^n a_j}{n}

    其中 aja_j 为第 jj 条链当前的长度,但注意到:

    ∑j=1naj=i−1\sum _{j = 1} ^n a_j = i - 1

    因此代入上式,可知答案为:

    $$\left( 1 + \dfrac{\displaystyle\sum _{i = 1} ^m \dfrac{i - 1}{n}}{m} \right) k$$

    里面求和的各项形成等差数列,可以化简:

    (1+m−12n)k\left( 1 + \dfrac{m - 1}{2n} \right) k
    #include <bits/stdc++.h>
    using namespace std;
    const int P = 1e9 + 7;
    int divs(int a, int b, int p)
    {
    	if (b % a == 0) return b / a;
    	int x = divs(p % a, a - b % a, a);
    	return (1ll * x * p + b) / a;
    }
    int main()
    {
    	freopen("chaining.in", "r", stdin);
    	freopen("chaining.out", "w", stdout);
    	long long n, m, k;
    	cin >> n >> m >> k;
    	cout << divs(2 * n % P, k * (2 * n + m - 1) % P, P) << endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    268
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    21
    已通过
    13
    上传者