题目链接:小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. kao shi di er ti(还没有订正)

    // 离散化点 思路应该是对的 吧 但没时间去检查编译上的错误 #include <bits/stdc++.h> using namespace std; ; #define ri reg ...

  2. Big research problems (1)

    1. how to measure the uncertainty of prediction model or data analysis? 2.

  3. MyEclipse 安装及激活教程

    一.下载安装MyEclipse 在进行下面的步骤之前,先安装好MyEclipse (10.0.2015版本或更高版本)和JDK,安装完成后暂时不要运行MyEclipse. 二.运行MyEclipse激 ...

  4. kmp算法散记

    1. https://blog.csdn.net/abcjennifer/article/details/5794547 #include<bits/stdc++.h> using nam ...

  5. python解压压缩包的几种方式

    这里讨论使用Python解压如下五种压缩文件: .gz .tar  .tgz .zip .rar 简介 gz: 即gzip,通常只能压缩一个文件.与tar结合起来就可以实现先打包,再压缩. tar: ...

  6. JS高级---拷贝继承:把一个对象中的属性或者方法直接复制到另一个对象中

    拷贝继承:把一个对象中的属性或者方法直接复制到另一个对象中 浅拷贝 function Person() { } Person.prototype.age = 10; Person.prototype. ...

  7. Python3爬虫爬取淘宝商品数据

    这次的主要的目的是从淘宝的搜索页面获取商品的信息.其实分析页面找到信息很容易,页面信息的存放都是以静态的方式直接嵌套的页面上的,很容易找到.主要困难是将信息从HTML源码中剥离出来,数据和网页源码结合 ...

  8. 用python制作多份试卷防止作弊(随机排列题目顺序和答案顺序,提供参考答案)

    #! /usr/bin/python# randomQuizeGenerator.py   -   Creates quizzes with questions and answers in # ra ...

  9. Flink流处理(三)- 数据流操作

    3. 数据流操作 流处理引擎一般会提供一组内置的操作,用于对流做消费.转换,以及输出.接下来我们介绍一下最常见的流操作. 操作分为无状态的(stateless)与有状态的(stateful).无状态的 ...

  10. Python爬取微博热搜以及链接

    基本操作,不再详述 直接贴源码(根据当前时间创建文件): import requests from bs4 import BeautifulSoup import time def input_to_ ...