描述
- 每个询问在一行中输出分数A/B表示从该询问的区间[L,R]中随机抽出两只袜子颜色相同的概率。
分析
- 区间无修改的题目, 只需要求出各种颜色的数量即可, 所以可以用莫队.
- 如果一种颜色 i 在区间 [L, R] 内的数目是 c[i], 那么随机抽出两只袜子颜色相同的概率等于 ΣC(c[i], 2) / C(R-L+1, 2).
- 发现组合数的 m 位置都是2, 所以直接展开来算, 得到 Σc[i]*(c[i]-1) / [(R-L+1)*(R-L)].
- 这样分母我们已知, 分子可以通过状态转移得到, 每次如果新加入一个结点, 颜色为 a, 则先减掉原来 a 对分子的贡献即 c[i]*(c[i]-1), 然后++c[i], 再让分子加上现在 a颜色对分子的贡献, 即 c[i]*(c[i]-1). 删掉一个结点类似. 所以就用 O(1) 的时间从 [L, R] 转移到了 [L-1, R] 或者 [L+1, R]
或者 [L, R-1] 或者 [L, R+1].
- 再计算分子分母的gcd即可
- 不要忘记开 long long.
时间: 2024-10-09 23:17:06