小z的袜子
传送门
题目描述
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……
具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。
你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子。当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以方便自己选择。
然而数据中有L=R的情况,请特判这种情况,输出0/1。
输入输出格式
输入格式:
输入文件第一行包含两个正整数N和M。N为袜子的数量,M为小Z所提的询问的数量。接下来一行包含N个正整数Ci,其中Ci表示第i只袜子的颜色,相同的颜色用相同的数字表示。再接下来M行,每行两个正整数L,R表示一个询问。
输出格式:
包含M行,对于每个询问在一行中输出分数A/B表示从该询问的区间[L,R]中随机抽出两只袜子颜色相同的概率。若该概率为0则输出0/1,否则输出的A/B必须为最简分数。(详见样例)
输入输出样例
6 4
1 2 3 3 3 2
2 6
1 3
3 5
1 6
2/5
0/1
1/1
4/15
说明
30%的数据中 N,M ≤ 5000;
60%的数据中 N,M ≤ 25000;
100%的数据中 N,M ≤ 50000,1 ≤ L < R ≤ N,Ci ≤ N。
分析
裸的莫队算法,用tot数组记录每一颜色的总数,不难算出:每增加一个某颜色袜子,配成一对同色袜子的情况增加(tot-1),减少时的情况相同。
特别注意!!!:1ll要放在数的前面乘
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int n,m,a[60000],belong[60000];
long long ans[60000];
struct node{
int le,ri,no;
long long num;
}q[60000];
int L=1,R;
long long Ans;
int block,sum;
long long tot[60000];
long long S[60000];
bool cmp(const node &x,const node &y){
if(belong[x.le]==belong[y.le])return x.ri<y.ri;
return belong[x.le]<belong[y.le];
}
void add(int x){
tot[a[x]]++;
Ans+=tot[a[x]]-1;
}
void del(int x){
tot[a[x]]--;
Ans-=tot[a[x]];
}
long long gcd(long long a,long long b){
if((a%b)==0)
return b;
return gcd(b,a%b);
}
int main()
{ int i,j,k;
cin>>n>>m;
block=sqrt(n);
sum=((n%block)==0?(n/block):(n/block+1));
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
belong[i]=(i-1)/block+1;
}
for(i=1;i<=m;i++){
scanf("%d%d",&q[i].le,&q[i].ri);
q[i].no=i;
q[i].num=1ll*(q[i].ri-q[i].le+1)*(q[i].ri-q[i].le)/2;
}
sort(q+1,q+m+1,cmp);
for(i=1;i<=m;i++){
while(L<q[i].le){
del(L);
L++;
}
while(L>q[i].le){
L--;
add(L);
}
while(R>q[i].ri){
del(R);
R--;
}
while(R<q[i].ri){
R++;
add(R);
}
ans[q[i].no]=Ans;
S[q[i].no]=q[i].num;
if(q[i].le==q[i].ri)
ans[q[i].no]=0,
S[q[i].no]=1;
}
for(i=1;i<=m;i++){
long long x=gcd(ans[i],S[i]);
printf("%lld/%lld\n",ans[i]/x,S[i]/x);
}
return 0;
}
小z的袜子的更多相关文章
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7676 Solved: 3509[Subm ...
- 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...
- BZOJ-2038 小Z的袜子(hose) 莫队算法
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 5573 Solved: 2568 [Subm ...
- 清橙 A1206 小Z的袜子(莫队算法)
A1206. 小Z的袜子 时间限制:1.0s 内存限制:512.0MB 总提交次数:1357 AC次数:406 平均分:46.75 将本题分享到: 查看未格式化的试题 ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- BZOJ2038小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2343 Solved: 1077[Subm ...
- Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3577 Solved: 1652[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
随机推荐
- Java分布式应用技术架构
分布式架构的演进 系统架构演化历程-初始阶段架构初始阶段 的小型系统 应用程序.数据库.文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序.数据库.文件等所有的资源都在一台服务器上.描述: ...
- mysql数据库快速入门(1)
1.数据库操作 1.1.连接mysql服务器 mysql -u root( 用户名 ) -p 1.2.退出mysql命令提示窗 exit 1.3.查看版本 SELECT VERSION(); 1.4. ...
- vue-cli完整地引入element-ui
1因为该组件会依赖于jQuery,所以先安装jQuery所需依赖: 进入npm控制台,输入指令: cnpm install jquery --save-dev 然后在入口文件main.js中引入: i ...
- bzoj:1700: [Usaco2007 Jan]Problem Solving 解题
Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场 ...
- bzoj:1654 [Usaco2006 Jan]The Cow Prom 奶牛舞会
Description The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in ...
- BZOJ 1316: 树上的询问 (点分治+set)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1316 因为只要求存在某条路径长度为K,所以点分,然后用set判断差值是否在set中就可以了. ...
- 整数n的全排列
第一道用搜索码的.得纪念一下 #include <iostream> #include <cstdio> #include <cstring> #include & ...
- bean的作用域 :singleton和prototype
- Eclipse安装JD-Eclipse反编译插件成功看源码
Eclipse安装JD-Eclipse反编译插件 转载 2017年12月24日 15:19:27 http://heavengate.blog.163.com/blog/static/202381 ...
- html日历(1)
<html> <head> <link rel="stylesheet" type="text/css" href="S ...