题目链接:P1494 [国家集训队]小Z的袜子 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目是中文的,我在这就不解释题意了。

这道题目考察的是莫队算法,还是老样子,模板不再多说,不熟悉的可以翻我之前的博客,下面主要说一下add函数以及sub函数。

我们用ans记录当前区间拿到的袜子是同一种颜色的可能情况数。

先说一下add函数,假如我们现在要加入的袜子颜色是x,那么情况数会怎样变化呢?显然不会影响从其他颜色中任选两只相同颜色的袜子的情况,他影响的只能是袜子颜色是x的情况,那又是如何影响的呢?显然只有选定当前加的袜子才会对之前的方案数产生影响,我们再从当前区间的袜子中随意选择一只,如果袜子颜色是x那么方案数就要加1,反之对ans无影响,也就是我们当前要加入的袜子颜色是x,那么对答案的贡献就是cnt[x],最后别忘了cnt[x]++。

下面来说一下sub函数,同样地,假如我们现在要删除的袜子颜色是x,那么情况数会怎样变化呢?显然不会影响从其他颜色中任选两只相同颜色的袜子的情况,他影响的只能是袜子颜色是x的情况,那又是如何影响的呢?也就是说答案里面有多少种情况是要删除的这个袜子贡献的呢?显然除了我们要删除的袜子,再从剩下的袜子种任选一个颜色为x的袜子均可构成一种方案数,所以我们要先进行cnt[x]--,再减去我们要删除的这个袜子所带来的贡献,也就是ans-=cnt[x]。

最后就是别忘了对满足题意的方案数以及总的情况数进行约分。

剩下的就是一个裸的莫队模板了:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
using namespace std;
const int N=1e5+10;
typedef long long ll;
struct node{ll l,r,id,pl;
}p[N];
bool cmp(node a,node b)
{if(a.pl!=b.pl) return a.pl<b.pl;return a.r<b.r;
}
//ans记录当前取到相同颜色袜子的可能情况数
ll n,m,ans;
ll sum1[N],sum2[N],cnt[N],a[N];
//sum1[i]存的是第i个询问的答案的分子
//sum2[i]存的是第i个询问的答案的分母
ll gcd(ll a,ll b)
{if(a) return gcd(b%a,a);return b;
}
void add(ll x)
{ans+=cnt[x];cnt[x]++;
}
void sub(ll x)
{cnt[x]--;ans-=cnt[x];
}
int main()
{scanf("%lld%lld",&n,&m);ll pl=sqrt(n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);for(int i=1;i<=m;i++){scanf("%lld%lld",&p[i].l,&p[i].r);p[i].id=i;p[i].pl=(p[i].l-1)/pl+1;}sort(p+1,p+m+1,cmp);ll l=1,r=0;for(int i=1;i<=m;i++){while(l<p[i].l){sub(a[l]);l++;}while(l>p[i].l){l--;add(a[l]);}while(r<p[i].r){r++;add(a[r]);}while(r>p[i].r){sub(a[r]);r--;}ll t=(p[i].r-p[i].l+1)*(p[i].r-p[i].l)/2;if(ans==0) sum2[p[i].id]=1;//如果分子为0,则分母直接为1 else//约分 {ll GCD=gcd(ans,t);sum1[p[i].id]=ans/GCD;sum2[p[i].id]=t/GCD;}}for(int i=1;i<=m;i++)printf("%lld/%lld\n",sum1[i],sum2[i]);return 0;
}

(HYSBZ - 2038)小Z的袜子(hose)(莫队)相关推荐

  1. HYSBZ - 2038 小Z的袜子(hose) (莫队入门)

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

  2. 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门

    题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...

  3. [BZOJ2038] [2009国家集训队] 小Z的袜子(hose) (莫队)

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

  4. 【bzoj2038】[2009国家集训队]小Z的袜子(hose) 莫队算法

    原文地址:http://www.cnblogs.com/GXZlegend/p/6803860.html 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终 ...

  5. bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队

    Time Limit: 20 Sec Memory Limit: 259 MB Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小 ...

  6. 【清橙 A1206】小Z的袜子(莫队算法)

    [清橙 A1206]小Z的袜子(莫队算法) A1206. 小Z的袜子 时间限制:1.0s   内存限制:512.0MB   总提交次数:1144   AC次数:319   平均分:43.15 将本题分 ...

  7. (莫队算法)2038: 小Z的袜子(hose)

    今天学习了一个新的套路:莫队算法 这个算法是用于离线求解区间查询问题的. 区间查询问题通常是如下形式: 给出一个数组1,1,1,1,2,2,2,2,3,3,3,3.... 求解在[l1,r1][l2, ...

  8. BZOJ2038 小Z的袜子 (莫队算法)

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)

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

  10. CH4402 小Z的袜子(莫队)

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

最新文章

  1. java编写十个评委_Java题 在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分...
  2. 企业网络推广专员浅析企业网络推广中网站关键词排名优化有何技巧?
  3. php+打开文件和其子文件,用 PHP 内置函数 fopen 创建文件和打开文件
  4. win32调用系统颜色对话框
  5. 数据结构笔记(十八)-- 树的定义和基本术语
  6. git pull VS git fetchmerge(good)
  7. linux默认提供几个虚拟桌面 如何,消防车按功能用途可分为灭火消防车、专勤消防车、举高消防车和后援消防车。...
  8. win10 快捷键大全(集合)
  9. PART 1.3 风控利率那些事儿(名义利率 实际利率 还款方式 以及 计算逻辑汇总)
  10. Java分数的加减乘除
  11. android xcl charts,我写的Android图表库XCL-Charts,整理好现在开源了!!!
  12. linux【网络】网络请求延迟变大了,我该怎么办?
  13. vivo手机权限禁止--跳转至对应app的权限设置页面
  14. linux网络诊断工具
  15. Atom插件下载失败解决办法
  16. 在合约中获取代币余额のEOS智能合约系列
  17. linux PHP重启命令操作
  18. 【基于Linux系统设备树的SPI驱动编写方法】
  19. GO微服务实战第二十二节 案例:如何通过 Service Meh 实现熔断和限流?
  20. [iOS翻译]《iOS7 by Tutorials》在Xcode 5里使用单元测试(下)

热门文章

  1. 结构体的对其规则以及为什么要对其
  2. wemos D1 arduino项目实战2-设备连接Tlink平台
  3. 微信小程序 自定义组件并引入
  4. 【弄nèng - Activiti6】Activiti6入门篇(九)—— 邮件任务
  5. c语言生成16进制随机数,C语言实战篇——模拟ATM取款机,最强大脑小游戏,进制转换,产生不同的随机数...
  6. L1范数优化之近端梯度下降法
  7. RedisTemplate实现发布订阅
  8. 基于单片机的直流电机控制系统设计
  9. 在嵌入式设备运行Rust/bluer蓝牙简单应用
  10. 华为 模拟器 linux,华为ensp模拟器最新版本下载_华为ensp模拟器3264位官方版下载V1.3.00.100 - 系统之家...