码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ-2038-小Z的袜子hose-莫队

时间:2015-04-07 19:40:42      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:暴力   莫队   

描述

  • 每个询问在一行中输出分数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.


BZOJ-2038-小Z的袜子hose-莫队

标签:暴力   莫队   

原文地址:http://blog.csdn.net/qq_21110267/article/details/44924413

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!