题目链接:小Z的袜子

题意:$n$只袜子,$m$个询问,每次回答有多大概率在$[L,R]$区间内抽到两只颜色相同的袜子

思路:普通莫队,如果两个询问左端点在一个块内,则按询问右端点排序,否则按照所在块的序号排序,维护一个数组$num$,表示在区间$[L,R]$中,颜色为$c$的袜子有$num[c]$只,令变量$res=\sum_{c}num[c]*(num[c]-1)/2$,显然对于每个区间$[L,R]$抽到同色袜子的概率就是$\frac{res}{C_{R-L+1}^{2}}$,每次移动区间时修改$num[c]$,同时更新$res$即可,时间复杂度$O(n^{\frac{3}{2}})$

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath> using namespace std; typedef long long ll; const int N = ; struct node {
int l, r, id;
}; int n, m, a[N];
int block, belong[N], tot, l[N], r[N];
ll num[N], res, mol[N], den[N];
node q[N]; void build()
{
block = sqrt(n);
tot = n / block;
if (n % block) tot++;
for (int i = ; i <= tot; i++) {
l[i] = (i - ) * block + ;
r[i] = i * block;
}
r[tot] = n;
for (int i = ; i <= n; i++)
belong[i] = (i - ) / block + ;
} bool cmp(node a, node b)
{
if (belong[a.l] != belong[b.l])
return belong[a.l] < belong[b.l];
return a.r < b.r;
} void add(int x)
{
res = res - num[a[x]] * (num[a[x]] - ) / ;
num[a[x]]++;
res = res + num[a[x]] * (num[a[x]] - ) / ;
} void sub(int x)
{
res = res - num[a[x]] * (num[a[x]] - ) / ;
num[a[x]]--;
res = res + num[a[x]] * (num[a[x]] - ) / ;
} ll c(int n)
{
return (ll)n * (n - ) / ;
} ll gcd(ll a, ll b)
{
return == b ? a : gcd(b, a % b);
} int main()
{
scanf("%d%d", &n, &m);
build();
for (int i = ; i <= n; i++) scanf("%d", &a[i]);
for (int i = ; i <= m; i++) {
scanf("%d%d", &q[i].l, &q[i].r);
den[i] = c(q[i].r - q[i].l + );
q[i].id = i;
}
sort(q + , q + m + , cmp);
int L = , R = ;
for (int i = ; i <= m; i++) {
while (q[i].l < L) add(--L);
while (q[i].r > R) add(++R);
while (q[i].l > L) sub(L++);
while (q[i].r < R) sub(R--);
mol[q[i].id] = res;
}
for (int i = ; i <= m; i++) {
ll d = gcd(mol[i], den[i]);
if ( == mol[i]) printf("0/1\n");
else printf("%lld/%lld\n", mol[i] / d, den[i] / d);
}
return ;
}

BZOJ - 2038 小Z的袜子(普通莫队)的更多相关文章

  1. (原创)BZOJ 2038 小Z的袜子(hose) 莫队入门题+分块

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

  2. BZOJ 2038 小Z的袜子(hose) 莫队算法模板题

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题目大意: 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中 ...

  3. BZOJ 2038 小z的袜子(莫队)

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

  4. [bzoj] 2038 小Z的袜子(hose) || 莫队

    原题 给出一个序列,求给定[l,r]内有任意取两个数,有多大概率是一样的 简单的莫队,每次+-当前区间里有的这个颜色的袜子的个数,最后除以(r-l+1)*(r-l)/2即可. 记得约分. #inclu ...

  5. BZOJ 2038 小Z的袜子(hose) (莫队算法)

    题意:中文题. 析:很著名的莫队算法,先把这个求概率的式子表达出来,应该是分子:C(x1, 2) + C(x2, 2) + C(x3, 2) + ... + C(xn, 2)  分母:C(n, 2), ...

  6. HYSBZ - 2038 小Z的袜子 (莫队算法)

    A1206. 小Z的袜子 时间限制:1.0s   内存限制:512.0MB   总提交次数:744   AC次数:210   平均分:44.44 将本题分享到:        查看未格式化的试题    ...

  7. 小Z的袜子(题解)(莫队)

    小Z的袜子(题解)(莫队) Junlier良心莫队 题目 luoguP1494 [国家集训队]小Z的袜子 code #include<bits/stdc++.h> #define lst ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  9. Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 5763  Solved: 2660[Subm ...

随机推荐

  1. Hibernate的基本工作原理

    Hibernate开发过程中会用到5个核心接口: 1.Configuration2.SessionFactory3.Session4.Transaction5.QueryHibernate就是通过这些 ...

  2. crowdfunding项目01——感人的错误

    四十搭环境,半个小时下载jar包,网速感人,一个半小时找bug真是感动 首先SSM项目,主要功能进行增删改查 建立父工程和子工程,产生依赖关系 父工程:pom 子工程:jar.war(web工程) 错 ...

  3. HTML的媒体元素(视频+音频)

    网页的媒体元素 包括 视频 音频 首先创建一个文件夹,放视频和音频         播放(非自动播放+自动播放) 视频播放 1.1. 打开网页不自动播放 <video src="../ ...

  4. day11 ss命令 查看网络端口使用情况及对应pid centos7

    [root@oldboyedu ~]# ss -lntup Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNC ...

  5. Yii2.0 高级版修改默认访问控制器

    frontend->config->main-local.php $config = [ 'defaultRoute' => 'index/index',//修改默认访问控制器 'c ...

  6. php 利用debug_backtrace方法跟踪代码调用

    在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到出问题的地方进行修改.如果有一个方法可以获取到某段代码是被哪个方法调用,并能一直回溯到最开始调用的地方(包括调 ...

  7. 励志成为优产的母猪--------猜数游戏 ,历史记录,pickle保存,队列deque

    # pickle 可以处理复杂的序列化语法.(例如自定义的类的方法,游戏的存档等),存档以文件的形式保存 参见 https://www.cnblogs.com/abobo/p/8080447.html ...

  8. 【js】子菜单吸顶(滚动到一定距离 容器置顶)附 无间断置顶 避免闪动

    思考逻辑:当向上滚动的高度>= 观察容器距离顶部高度 即可触发吸顶 以下代码在vue工程,作参考 handleScroll () { const scrollTop = window.pageY ...

  9. 最详细的linux安装php过程

    本文主要和大家分享最详细的linux安装php过程,然后写好了nginx的安装配置,后面就是php的安装和mysql的安装,不过时间有限,而且放篇里也太长,所以都是分开来写,php安装完毕后就是mys ...

  10. 基于icmp的tracert路由追踪程序

    https://blog.csdn.net/u013271921/article/details/45488173 #include<winsock2.h> //#include<i ...