作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……
具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。
你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子。当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以方便自己选择。

Input
输入文件第一行包含两个正整数N和M。N为袜子的数量,M为小Z所提的询问的数量。接下来一行包含N个正整数Ci,其中Ci表示第i只袜子的颜色,相同的颜色用相同的数字表示。再接下来M行,每行两个正整数L,R表示一个询问。

Output
包含M行,对于每个询问在一行中输出分数A/B表示从该询问的区间[L,R]中随机抽出两只袜子颜色相同的概率。若该概率为0则输出0/1,否则输出的A/B必须为最简分数。(详见样例)

Sample Input
6 4
1 2 3 3 3 2
2 6
1 3
3 5
1 6

Sample Output
2/5
0/1
1/1
4/15
【样例解释】
询问1:共C(5,2)=10种可能,其中抽出两个2有1种可能,抽出两个3有3种可能,概率为(1+3)/10=4/10=2/5。
询问2:共C(3,2)=3种可能,无法抽到颜色相同的袜子,概率为0/3=0/1。
询问3:共C(3,2)=3种可能,均为抽出两个3,概率为3/3=1/1。
注:上述C(a, b)表示组合数,组合数C(a, b)等价于在a个不同的物品中选取b个的选取方案数。
【数据规模和约定】
30%的数据中 N,M ≤ 5000;
60%的数据中 N,M ≤ 25000;
100%的数据中 N,M ≤ 50000,1 ≤ L < R ≤ N,Ci ≤ N。

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int MAXN = ;
  5. const int MAXM = ;
  6.  
  7. struct Query{
  8. int L, R, id;
  9. }node[MAXM];
  10.  
  11. long long Gcd(long long a, long long b){
  12. if (b == )
  13. return a;
  14. return Gcd(b, a % b);
  15. }
  16.  
  17. struct Ans{
  18. long long a, b;
  19. void reduce(){
  20. int d = Gcd(a, b);
  21. a /= d;
  22. b /= d;
  23. }
  24. }ans[MAXM];
  25.  
  26. int a[MAXN], num[MAXN], n, m, unit;
  27.  
  28. bool Cmp(Query a, Query b){
  29. if (a.L / unit != b.L / unit)
  30. return a.L / unit < b.L / unit;
  31. else
  32. return a.R < b.R;
  33. }
  34.  
  35. void work(){
  36. long long temp = ;
  37. memset(num, , sizeof(num));
  38. int L = , R = ;
  39. for (int i = ;i < m; i++){
  40. while (R < node[i].R){
  41. R++;
  42. temp -= (long long)num[a[R]] * num[a[R]];
  43. num[a[R]]++;
  44. temp += (long long)num[a[R]] * num[a[R]];
  45. }
  46. while (R > node[i].R){
  47. temp -= (long long)num[a[R]] * num[a[R]];
  48. num[a[R]]--;
  49. temp += (long long)num[a[R]] * num[a[R]];
  50. R--;
  51. }
  52. while (L < node[i].L){
  53. temp -= (long long)num[a[L]] * num[a[L]];
  54. num[a[L]]--;
  55. temp += (long long)num[a[L]] * num[a[L]];
  56. L++;
  57. }
  58. while (L > node[i].L){
  59. L--;
  60. temp -= (long long)num[a[L]] * num[a[L]];
  61. num[a[L]]++;
  62. temp += (long long)num[a[L]] * num[a[L]];
  63. }
  64. ans[node[i].id].a = temp - (R - L + );
  65. ans[node[i].id].b = (long long)(R - L + ) * (R - L);
  66. ans[node[i].id].reduce();
  67. }
  68. }
  69.  
  70. int main(){
  71. freopen("in", "r", stdin);
  72. ios::sync_with_stdio(false);
  73. while (cin >> n >> m){
  74. for (int i = ;i <= n; i++)
  75. cin >> a[i];
  76. for (int i = ;i < m; i++){
  77. node[i].id = i;
  78. cin >> node[i].L >> node[i].R;
  79. }
  80. unit = (int)sqrt(n);
  81. sort(node, node + m, Cmp);
  82. work();
  83. for (int i = ;i < m; i++)
  84. cout << ans[i].a << "/" << ans[i].b << endl;
  85. }
  86. return ;
  87. }

HYSBZ-2038小Z的袜子的更多相关文章

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

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

  2. bzoj 2038 小Z的袜子(hose)(莫队算法)

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

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

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

  4. BZOJ - 2038 小Z的袜子(普通莫队)

    题目链接:小Z的袜子 题意:$n$只袜子,$m$个询问,每次回答有多大概率在$[L,R]$区间内抽到两只颜色相同的袜子 思路:普通莫队,如果两个询问左端点在一个块内,则按询问右端点排序,否则按照所在块 ...

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

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

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

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

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

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

  8. BZOJ 2038 小Z的袜子(hose)(分组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2038 题意:给出n个袜子.m个询问,每个询问一个区间[L,R],询问这个区间中任意拿出两 ...

  9. [BZOJ 2038]小Z的袜子

    传送门:BZOJ 2038 题意很明确,是在给定的区间内任意选取两个数,求选到两个相同的数的概率. 所以我们得首先统计在给定的区间内,相同的数对有多少对,那么这里就使用到了莫队算法.如果对莫队算法还不 ...

  10. bzoj 2038 小z的袜子 莫队例题

    莫队,利用可以快速地通过一个问题的答案得到另一问题的答案这一特性,合理地组织问题的求解顺序,将已解决的问题帮助解决当前问题,来优化时间复杂度. 典型用法:处理静态(无修改)离线区间查询问题. 线段树也 ...

随机推荐

  1. 题解【洛谷P2863】 [USACO06JAN]牛的舞会The Cow Prom

    题面 题解 \(Tarjan\)板子题. 统计出大小大于\(1\)的强连通分量数量输出即可. 代码 #include <iostream> #include <cstdio> ...

  2. Centos7 切换 yum 源

    # yum install lrzsz修改CentOS默认yum源为mirrors.aliyun.com1.首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.r ...

  3. 【游戏体验】I Paid For It!(火柴人破坏狂)

    >>>点此处可试玩无敌版<<< 注意,本游戏含有少量暴力元素,13岁以下的儿童切勿尝试本款游戏 这款游戏打击感非常高,动画也比较绚丽,可玩性很高 个人测评 游戏性 ...

  4. YAML(YML)语法详解

    ansible playbook是由yaml(yml)语法书写,结构清晰,可读性强,所以必须掌握yaml(yml)基础语法 语法 描述 锁进  YAML使用固定的缩进风格表示层级结构,每个缩进由两个空 ...

  5. hadoop学习笔记(十):hdfs在命令行的基本操作命令(包括文件的上传和下载和hdfs中的文件的查看等)

    hdfs命令行 ()查看帮助 hdfs dfs -help ()查看当前目录信息 hdfs dfs -ls / ()上传文件 hdfs dfs -put /本地路径 /hdfs路径 ()剪切文件 hd ...

  6. 13.56Mhz下直接阻抗匹配调试步骤

    直接匹配阻抗,天线与射频芯片在同一块板子,调试步骤与50欧姆阻抗匹配调试天线参数差不多,多了一部分射频芯片端的滤波部分的参数计算.下面介绍调试过程. 1.首先看一下射频芯片发射部分原理图:分析原理图时 ...

  7. kuangbin专题 专题九 连通图 Critical Links UVA - 796

    题目链接:https://vjudge.net/problem/UVA-796 题目:裸的求桥,按第一个元素升序输出即可. #include <iostream> #include < ...

  8. 神经网路的层数,损失函数(loss)

    神经网络的复杂度:可用神经网络的层数和神经网络中待优化参数个数表示 神经网路的层数:一般不计入输入层,层数 = n 个隐藏层 + 1 个输出层 神经网路待优化的参数:神经网络中所有参数 w 的个数 + ...

  9. buuctf 二维码

    首先下载文件 然后用解压工具解压之后 发现是一个二维码 扫描二维码 并没有拿到 flag 然后将图片拖进 hxd中搜索PK发现有一个压缩包  将压缩包提取出来 暴力破解 然后得到密码 然后解压 然后得 ...

  10. 【Vue CLI】从安装到构建项目再到目录结构的说明

    目录 1. 构建我们的项目 2. 目录结构说明 2.1 build目录 2.2 config目录 2.3 src目录 2.4 static目录 "Vue CLI是一个基于Vue.js进行快速 ...