2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose)
Time Limit: 20 Sec Memory Limit: 259 MB
Submit: 9472 Solved: 4344
Description
作为一个生活散漫的人,小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
1 2 3 3 3 2
2 6
1 3
3 5
1 6
Sample Output
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。
code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 50001
#define ll long long
using namespace std; int n,m,pos[N],c[N];
ll s[N],ans;
struct node {
int l,r,id;
ll a,b;
} a[N]; ll sqr(ll x)
{
return x*x;
}
ll gcd(ll a,ll b)
{
return b==?a:gcd(b,a%b);
}
bool cmp(node a,node b)
{
if(pos[a.l]==pos[b.l])return a.r<b.r;
return a.l<b.l;
}
bool cmp_id(node a,node b)
{
return a.id<b.id;
}
void init()
{
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
scanf("%d",&c[i]);
int block=int(sqrt(n));
for(int i=; i<=n; i++)
pos[i]=(i-)/block+;
for(int i=; i<=m; i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
a[i].id=i;
}
}
void update(int p,int add)
{
ans-=sqr(s[c[p]]);
s[c[p]]+=add;
ans+=sqr(s[c[p]]);
}
void solve()
{
for(int i=,l=,r=; i<=m; i++)
{
for(; r<a[i].r; r++)
update(r+,);
for(; r>a[i].r; r--)
update(r,-);
for(; l<a[i].l; l++)
update(l,-);
for(; l>a[i].l; l--)
update(l-,);
if(a[i].l==a[i].r)
{
a[i].a=;
a[i].b=;
continue;
}
a[i].a=ans-(a[i].r-a[i].l+);
a[i].b=(ll)(a[i].r-a[i].l+)*(a[i].r-a[i].l);
ll k=gcd(a[i].a,a[i].b);
a[i].a/=k;
a[i].b/=k;
}
}
int main()
{
// freopen("hose.in","r",stdin);
// freopen("hose.out","w",stdout);
init();
sort(a+,a+m+,cmp);
solve();
sort(a+,a+m+,cmp_id);
for(int i=; i<=m; i++)
printf("%lld/%lld\n",a[i].a,a[i].b);
return ;
}
2038: [2009国家集训队]小Z的袜子(hose)的更多相关文章
- 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: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...
- 2038: [2009国家集训队]小Z的袜子(hose) 分块
: [2009国家集训队]小Z的袜子(hose) Time Limit: Sec Memory Limit: MB Submit: Solved: [Submit][Status][Discuss] ...
随机推荐
- Excel 移动列操作
- bzoj1413 [ZJOI2009]取石子游戏
Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...
- web项目脱离Eclipse在Tomcat部署并配置Eclipse调试
简单来说,把WEB项目打成war包后放到webapps目录下启动tomcat便部署成功了,但是因为与Eclipse没有关联,故而无法Debug调试代码.这时在Tomcat的catalina.sh脚本里 ...
- JavaWeb之session应用
session和cookie都是用来存储信息的,区别是session是在服务器端存储信息,而cookie则是在浏览器端存储信息. 通常服务器端存储session,服务器端存储和获取session,一般 ...
- meta的随堂笔记
Meta标签与搜索引擎优化(SEO) 概要 通常所说的meta标签,是在Html网页源代码中的一个重要的html标签.meta标签用来描述一个html网页文档的属性,例如作者.日期和时间.网页描述.关 ...
- 转:system.Security.Cryptography C# 加密和解密
以下文转自: http://www.360doc.com/content/13/0122/05/19147_261678471.shtml 总结:注册的时候经过MD5加密存进数据库,在登录的时候需要先 ...
- python函数调用时传参方式
位置参数 位置参数需与形参一一对应 def test(a,b) #a,b就是位置参数 print(a) print(b) test(1,2) 关键字参数 与形参顺序无关 def test(x,y) ...
- 使用 jTessBoxEditor 生成 tesseract-orc 的字典
本文使用图片方式记录使用 jTessBoxEditor 一站式生成自动文件的方式 首先感谢 Tesseract OCR 讨论群 389402579 的管理员[创世倾城 QQ:457606663] 的帮 ...
- 19-3-5Python中列表、元组、以及range
一.列表: 为什么要学列表? 因为字符串存在缺点: 1) 只能存储少量的数据. 2) 数据类型无论索引.切片 获取的都是字符串类型,类型过于单一,转化成它原来的类型还需要进一步转换 ...
- 日期格式操作,在oracle和mysql中的实现
oracle add_months(日期格式值 , 整数n) 当整数n=12时,代表一年,向后推迟一年,若n=-12代表回退一年 如 to_char(add_months(to_date('2018 ...