题干

就是将$add$和$del$函数里的$ans$变化变成组合数嘛,

先预处理出$x$只相同袜子一共有$f[x] = 1+2+...+$$(x-1)$种组合,

要注意,由于$f[x]$是一直加到$x-1$,所以我们要$add,del$两个函数中都要关注这个问题:

  $add$函数要先更改$ans$数值再改$cnt$,$del$函数要先更改$cnt$再改$ans$数值

再就是直接套莫队板子了,板子还是注意给问题排序时要分块

当然小学数学老师教过我们,分数再最后要约分

上代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
#define NUM 50010
using namespace std;
ll f[NUM];//预处理的组合数
int a[NUM],cnt[NUM];
int n,m;
struct wen{
int l,r,num;
};
wen q[NUM];//存下每个问题
int blo;//每个块内的元素数量
bool cmp( wen x,wen y ){
if( x.r/blo == y.r/blo ) return x.l < y.l;
return x.r < y.r;
}
ll ans;
void add( int x ){
ans += cnt[a[x]];
cnt[a[x]]++;
}
void del( int x ){
cnt[a[x]]--;
ans -= cnt[a[x]];
}
struct da{
ll zi,mu;//对于每个问题的答案的分子分母
};
da anss[NUM];
ll gcd( int x,int y ){
if( x < y ) swap( x,y );
if( y == 0 ) return x;
return gcd( y,x%y );
}
int main(){
cin >> n >> m;
blo = sqrt(n);
for( int i = 1;i <= n;i++ )
f[i] = f[i-1] + i;
for( int i = 1;i <= n;i++ )
cin >> a[i];
for( int i = 1;i <= m;i++ ){
cin >> q[i].l >> q[i].r;
q[i].num = i;
}
sort( q+1,q+m+1,cmp );
int l = 1,r = 0,ql,qr;
for( int i = 1;i <= m;i++ ){
ql = q[i].l,qr = q[i].r;
if( qr == ql ){ //如题干所言,特判
anss[q[i].num].zi = 0;
anss[q[i].num].mu = 1;
continue;
}
while( l < ql ){
del( l );
l++;
}
while( r > qr ){
del( r );
r--;
}
while( l > ql ){
l--;
add( l );
}
while( r < qr ){
r++;
add( r );
}
ll mu = f[qr-ql],p = gcd( ans,mu );
anss[q[i].num].zi = ans/p;
anss[q[i].num].mu = mu/p;//约分
}
for( int i = 1;i <= m;i++ )
cout << anss[i].zi << "/" << anss[i].mu << endl;
return 0;
}

P1494 小Z的袜子 莫队的更多相关文章

  1. 小Z的袜子 & 莫队

    莫队学习 & 小Z的袜子 引入 莫队 由莫涛巨佬提出,是一种离线算法 运用广泛 可以解决广大的离线区间询问题 莫队的历史 早在mt巨佬提出莫队之前 类似莫队的算法和莫队的思想已在Codefor ...

  2. P1494 [国家集训队]小Z的袜子/莫队学习笔记(误

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...

  3. BZOJ 2038 [2009国家集训队]小Z的袜子 莫队

    2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...

  4. 【国家集训队2010】小Z的袜子[莫队算法]

    [莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...

  5. bzoj 2308 小Z的袜子(莫队算法)

    小Z的袜子 [题目链接]小Z的袜子 [题目类型]莫队算法 &题解: 莫队算法第一题吧,建议先看这个理解算法,之后在参考这个就可以写出简洁的代码 我的比第2个少了一次sort,他的跑了1600m ...

  6. Luogu 1494 - 小Z的袜子 - [莫队算法模板题][分块]

    题目链接:https://www.luogu.org/problemnew/show/P1494 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天 ...

  7. BZOJ 2038 小z的袜子 & 莫队算法(不就是个暴力么..)

    题意: 给一段序列,询问一个区间,求出区间中.....woc! 贴原题! 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过 ...

  8. BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块

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

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

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

随机推荐

  1. 企业应用架构研究系列二十八:身份认证 Beginning Out With IdentityServer4

    在.Netcore 技术栈中,一直在使用了开源组件IdentityService4进行身份管理,其功能的强大和易用性的确很受开发者喜欢,但是最近其开源组织Duende Software 开始对其进行商 ...

  2. 手把手教你在Linux中快速检测端口的 3 个小技巧

    一个执着于技术的公众号 前言 无论是要解决网络连接问题还是配置防火墙,第一件事是要检查系统实际打开了哪些端口. 本文介绍了几种快速查找 Linux 系统上哪些端口向外部开放的方法. 什么是开放端口 监 ...

  3. 面试突击44:volatile 有什么用?

    volatile 是 Java 并发编程的重要组成部分,也是常见的面试题之一,它的主要作用有两个:保证内存的可见性和禁止指令重排序.下面我们具体来看这两个功能. 内存可见性 说到内存可见性问题就不得不 ...

  4. ES6片段

    那些可能会忘记或不知所以然的点: 1. 2. 3. 4. 5. 6. /* 函数调用会在内存形成一个"调用记录",又称调用帧,保存调用位置和内存变量等信息. 如果在函数 A 的内部 ...

  5. 谈谈最近玩的设计软件:Figma 与 Sketch

    谈谈最近玩的设计软件:Figma 与 Sketch 本文写于 2020 年 5 月 9 日 作为一个优秀的开发者,不懂设计是绝对不行的! 毕竟不懂设计的程序员不是好老板. 而做设计,早已不是尺规作图的 ...

  6. flask配置文件、路由设置、模板语法、请求与响应、session使用、闪现功能(flash)

    今日内容概要 flask 配置文件 flask 路由系统 flask模板语法 请求与相应 session 闪现(flash翻译过来的) 内容详细 1.flask 配置文件 # django ---&g ...

  7. Linux:可执行程序的Shell传参格式规范

    1. Linux下可执行程序的Shell传参格式规范 Linux下的可执行程序在运行时经常需要传一些参数,而这些参数是有规范的.包括我们自己写的在Linux系统下运行的Shell脚本.Python脚本 ...

  8. C# 四舍五入中一处易错点

    ,你没看错,四舍五入的结果 和我们期待的不太一样 Why?? 进入源码看下,注释中解释的很清楚.. 默认情况下,Math.Round()方法返回的是最接近的整数,这个没问题,问题是当要转换的数据在 两 ...

  9. 微信小程序开发 记录

    采坑了 微信小程序--TabBar不出现的一种原因 学习微信小程序中,遇到底部的TabBar不出现的问题.经过多番尝试,终于解决问题.在此记录问题产生的原因和对策.下面先描述错误现象,接着指出错误原因 ...

  10. 构建第一个模型:KNN算法(Iris_dataset)

    利用鸢尾花数据集完成一个简单的机器学习应用~万丈高楼平地起,虽然很基础,但是还是跟着书敲了一遍代码. 一.模型构建流程 1.获取数据 本次实验的Iris数据集来自skicit-learn的datase ...