1 条题解
-
0
显然 次查询独立,最后乘上 即可。
不难发现查询一个元素的访问数等于同一条链中排在它前面的元素个数加上 ,这个加 可以在最后直接加。
不难发现将元素插到链头或链尾,不妨改为插在链尾,那么排在第 个元素前面的元素个数期望是:
其中 为第 条链当前的长度,但注意到:
因此代入上式,可知答案为:
$$\left( 1 + \dfrac{\displaystyle\sum _{i = 1} ^m \dfrac{i - 1}{n}}{m} \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
- 上传者