题目:洛谷P1494、BZOJ2038。

题目大意:给你一列袜子的颜色,每次要你求从区间$[L,R]$内随机选两个袜子颜色相同的概率。
解题思路:
首先,对于某个特定区间$[L,R]$,它的概率是$\frac{\sum\limits_{i=1}^{n}\frac{C_i\times (C_i-1)}{2}}{\frac{(R-L+1)\times(R-L)}{2}}$,其中$C_i$表示在$[L,R]$内,颜色$i$的出现次数。
然后,$R-L+1$和$R-L$是可以直接求的。
重点在于求上面那个玩意儿。我们发现,如果$C_i$增加$1$,那么答案将会增加原来的$C_i$(减$1$同理)。
所以我们可以在知道$[L,R]$的答案的情况下,用$O(1)$的时间得到$[L\pm 1,R]$或$[L,R\pm 1]$的答案。
然后莫队即可。

C++ Code:

#include<bits/stdc++.h>
#define belong(i) ((i-1)/sz+1)
#define N 50005
#define ll long long
int n,sz,m,a[N],cnt[N]={0},p[N];
ll ans[N];
inline int readint(){
int c=getchar();
for(;!isdigit(c);c=getchar());
int d=0;
for(;isdigit(c);c=getchar())
d=(d<<3)+(d<<1)+(c^'0');
return d;
}
struct Q{
int l,r,num;
bool operator <(const Q& rhs)const{
if(belong(l)!=belong(rhs.l))return l<rhs.l;
return r<rhs.r;
}
}q[N];
int main(){
n=readint(),m=readint();
sz=int(sqrt(n)+1e-5);
for(int i=1;i<=n;++i)a[i]=readint();
for(int i=1;i<=m;++i)q[i].l=readint(),q[i].r=readint(),q[i].num=i;
std::sort(q+1,q+m+1);
int l=1,r=1;
ll now=0;
++cnt[a[1]];
for(int i=1;i<=m;++i){
while(r<q[i].r)now+=cnt[a[++r]]++;
while(l>q[i].l)now+=cnt[a[--l]]++;
while(r>q[i].r)now-=--cnt[a[r--]];
while(l<q[i].l)now-=--cnt[a[l++]];
p[q[i].num]=r-l+1;
ans[q[i].num]=now;
}
for(int i=1;i<=m;++i){
if(ans[i]==0){
putchar('0'),putchar('/'),putchar('1'),putchar('\n');
continue;
}
int f=p[i];
ll x=std::__gcd(ans[i],(ll)f*(f-1)>>1);
printf("%lld/%lld\n",ans[i]/x,(ll)f*(f-1)/x>>1);
}
return 0;
}

[国家集训队2009]小Z的袜子的更多相关文章

  1. AC日记——[国家集训队2010]小Z的袜子 cogs 1775

    [国家集训队2010]小Z的袜子 思路: 传说中的莫队算法(优雅的暴力): 莫队算法是一个离线的区间询问算法: 如果我们知道[l,r], 那么,我们就能O(1)的时间求出(l-1,r),(l+1,r) ...

  2. 洛谷 1775. [国家集训队2010]小Z的袜子

    1775. [国家集训队2010]小Z的袜子 ★★★   输入文件:hose.in   输出文件:hose.out   简单对比时间限制:1 s   内存限制:512 MB [题目描述] 作为一个生活 ...

  3. 「国家集训队」小Z的袜子

    「国家集训队」小Z的袜子 传送门 莫队板子题. 注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些. 参考代码: #include <algorithm& ...

  4. 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  5. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...

  6. [国家集训队2010]小Z的袜子

    ★★★   输入文件:hose.in   输出文件:hose.out   简单对比 时间限制:1 s   内存限制:512 MB [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜 ...

  7. 1775. [国家集训队2010]小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...

  8. 【BZOJ 2038】【2009 国家集训队】小Z的袜子(hose) 分块+莫队

    $SDOI2016Day-1$临时抱佛脚学习一下莫队算法$233$ 我预感到自己省选要爆0hhh #include<cmath> #include<cstdio> #inclu ...

  9. [国家集训队][bzoj2038] 小Z的袜子 [莫队]

    题面: 传送门 思路: 又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率 我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少? 原来的总情况数是i*(i-1)/ ...

随机推荐

  1. 【JavaScript框架封装】实现一个类似于JQuery的DOM框架的封装

    // DOM框架(选择器框架) (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * 向现 ...

  2. Project Euler 8 Largest product in a series

    题意:寻找这 1000 个数中相邻 13 个数相乘积最大的值 思路:首先想到的是暴力,但是还可以利用之前记录过的数值,什么意思呢?即在计算 2 - 14 后,再计算 3 - 15 时完全可以利用之前计 ...

  3. Python复利

    Python复利 复利的计算是对本金及其产生的利息一并计算,也就是利上有利. 复利计算的特点是:把上期末的本利和作为下一期的本金,在计算时每一期本金的数额是不同的.复利的计算公式是:   s = 0 ...

  4. 2019-03-28 SQL Server select 1

    select 1 是比select *更有效率的写法 因为它不返回具体的数据记录,而是返回n行的1 select 1 from studentsselect class,count(1) as pax ...

  5. jQuery(Dom节点操作)

  6. 洛谷 U6254 最低费用

    U6254 最低费用 题目背景 小明暑假去国外游玩,到了最后一天,却发现自己的钱还不一定够去机场,于是他开始对国外特殊的交通方式进行研究,但是他发现路段的错综复杂使他头脑昏花,于是他打开电脑,希望你去 ...

  7. git-osc自己定义控件之:CircleImageView

    git-osc自己定义控件之:CircleImageView 一.CircleImageView的使用 在项目中能够发现,用户的头像都是圆形的.感觉非常好奇,昨天最终发现了,原来是自定了一个Image ...

  8. 虚拟ONVIF 摄像机

    測试视频监控系统须要大量的Camera.搭建起来也很麻烦,在vdceye中增加虚拟onvif 摄像 机支持,把一个Camera变成上百个. watermark/2/text/aHR0cDovL2Jsb ...

  9. Apache + Tomcat 负载均衡 session复制

    转自:http://blog.csdn.net/cssmhyl/article/details/8455400 http://snowolf.iteye.com/blog/743611 Apache  ...

  10. 杭电1018-Big Number(大数)

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...