【问题描述】

有N个数,随机选择一段区间,如果这段区间的所有数的平均值在[L,R]中则你比较厉害。求你比较厉害的概率。

【输入格式】

第一行有三个数N, l, r,含义如上描述。

接下来一行有N个数代表每一个数的值。

【输出格式】

输出一行一个分数a/b代表答案,其中a, b互质。 如果答案为整数则直接输出该

整数即可。

【样例输入 1】

4 2 3

3 1 2 4

【样例输出 1】

7/10

【样例输入 2】

4 1 4

3 1 2 4

【样例输出 2】

1

【样例解释】

塔外面有棵树。

【数据规模与约定】

对于30%的数据, 1 ≤ N ≤ 104。

对于60%的数据, 1 ≤ N ≤ 105。

对于100%的数据, 1 ≤ N ≤ 5 × 105, 0 < l ≤ r ≤ 100。

/*
要求区间平均值∈[L,R]的区间个数
现在我们来求区间平均值在1~r的个数和1~l(不包括l)的个数 前减后即为所求
以求1~r为例(用[L,R]-[1,L))
(a[i]+a[i+1]+......+a[i+k-1])/k<=r
[(a[i]+a[i+1]+......+a[i+k-1])+kr]/k<=0
[(a[i]-r)+(a[i+1]-r)+......+(a[i+k-1]-r)]/k<=0 (k>0)
so (a[i]-r)+(a[i+1]-r)+......+(a[i+k-1]-r)<=0
令s[i]=∑(a[i]-r)
即求s数组区间和<=0的个数
s[i+k-1]-s[i]<=0
s[i+k-1]<=s[i]
i<i+k-1
s[i]>=s[i+k-1]
即求s数组逆序对数.
答案为(ansr-ansl)/(n*(n+1)/2).
法二:要求[L,R]的合法答案只需求出不合法答案算补集.
合法的是>=l的正序对个数和<=r的逆序对个数.
so 只需求>=l的逆序对个数和<=r的正序对个数不合法即可(两者必定无交集).
(求正序对只需翻转数组即可orz.)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 500001
#define LL long long
using namespace std;
LL n,l,r,ansl,ansr,tot,a[MAXN],b[MAXN],b1[MAXN],tot1;
struct data{LL x,o;}s[MAXN],c[MAXN];
LL read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
bool cmp(const data &x,const data &y)
{
return x.x<y.x;
}
void add(LL x)
{
while(x<=n)
a[x]++,x+=x&-x;
return ;
}
LL query(LL x)
{
LL sum=0;
while(x>0) sum+=a[x],x-=x&-x;
return sum;
}
int main()
{
freopen("jian.in","r",stdin);
freopen("jian.out","w",stdout);
LL x;
n=read(),l=read(),r=read();
for(LL i=1;i<=n;i++) x=read(),c[i].o=s[i].o=i,
c[i].x=c[i-1].x+x-l,s[i].x=s[i-1].x+x-r;
sort(c+1,c+n+1,cmp),sort(s+1,s+n+1,cmp);
b[c[1].o]=1,b1[s[1].o]=1;
if(c[1].x<0) ansl++;
if(s[1].x<=0) ansr++;
for(LL i=2;i<=n;i++)
{
if(c[i].x==c[i-1].x) b[c[i].o]=b[c[i-1].o];
else b[c[i].o]=b[c[i-1].o]+1;
if(s[i].x==s[i-1].x) b1[s[i].o]=b1[s[i-1].o];
else b1[s[i].o]=b1[s[i-1].o]+1;
if(c[i].x<0) ansl++;
if(s[i].x<=0) ansr++;
}
for(LL i=n;i>=1;i--) ansl+=query(b[i]),add(b[i]+1);
memset(a,0,sizeof a);
for(LL i=n;i>=1;i--) ansr+=query(b1[i]),add(b1[i]);
LL ans=ansr-ansl,total=n*(n+1)/2;
LL xx=__gcd(ans,total);
ans/=xx,total/=xx;
if(total==1) cout<<ans;
else cout<<ans<<'/'<<total;
return 0;
}

Qbxt 模拟题 day2(am) T2 jian的更多相关文章

  1. 全国信息学奥林匹克联赛(NOIP2014)复赛 模拟题Day2 长乐一中

    题目名称 改造二叉树 数字对 交换 英文名称 binary pair swap 输入文件名 binary.in pair.in swap.in 输出文件名 binary.out pair.out sw ...

  2. 2019.10.1 qbxt模拟题

    第一题 考虑树上\(DP\),f[i][j][0/1]表示以\(i\)为根的子树,入读为零点的个数为\(j\),点\(i\)的入度为\(0\)/不为\(0\)时的方案数 转移的时候考虑\(u\)的一个 ...

  3. Qbxt 模拟题 day3(am) T3 选数字 (select)(贪心)

    选数字 (select Time Limit:3000ms Memory Limit:64MB 题目描述 LYK 找到了一个 n*m 的矩阵,这个矩阵上都填有一些数字,对于第 i 行第 j 列的位置上 ...

  4. CSP复赛day2模拟题

    没错,我又爆零了.....先让我自闭一分钟.....so 当你忘记努力的时候,现实会用一记响亮的耳光告诉你东西南北在哪. 好了,现在重归正题: 全国信息学奥林匹克联赛(NOIP2014) 复赛模拟题 ...

  5. QBXT模拟赛2

    总结 期望得分:\(100 + 40 + 0 = 140\) 实际得分:\(0 + 0 + 0 = 0\) 鬼知道为什么我代码没有交上..自测\(10 + 50 + 0\)--这是心态爆炸的一场考试 ...

  6. QBXT模拟赛1

    总结 期望得分:\(100 + 80 + 10 = 190\) 实际得分:\(90 + 80 + 10 = 180\) 这是在清北的第一场考试,也是在清北考的最高的一次了吧..本来以为能拿\(190\ ...

  7. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

随机推荐

  1. linux lkm rootkit常用技巧

    简介 搜集一下linux lkm rootkit中常用的一些技巧 1.劫持系统调用 遍历地址空间 根据系统调用中的一些导出函数,比如sys_close的地址来寻找 unsigned long ** g ...

  2. LKM rootkit:Reptile学习

    简介 Reptile是github上一个很火的linux lkm rootkit,最近学习了一些linux rootkit的内容,在这里记录一下. 主要是分析reptile的实现 Reptile的使用 ...

  3. 怎样理解NodeList的动态集合与静态集合

    NodeList 有两种, 一种是动态集合, 一种是静态集合, 所谓动态集合, 主要是 Node.prototype.childNodes; 返回的子节点集合对文档的节点增删改会即时改变; 而静态集合 ...

  4. html homework27

    1. 使用框架完成如下功能 将框架先上下分割成两部分(上半部分的为TopFrame).再将下半部分垂直分割为两部分(左侧为BottomLeftFrame,右侧为BottomRightFrame),为T ...

  5. 与 QWidget 有关的 Qt 可视化组件的继承关系图

    与 QWidget 有关的 Qt 可视化组件的继承关系图

  6. 【转】CnBlogs自定义博客样式

    文章有一个好的排版,将能够增加阅读者对其内容的兴趣. 本文总结了如何美化博客园中文章的部分显示样式. 1.美化文章标题的显示样式 2.增添LaTex数学公式的显示 3.目录索引的显示 4.添加文章末尾 ...

  7. vue-cli实现原理

    分析:https://kuangpf.com/vue-cli-analysis/create/basic-verification.html vue-cli-service :https://blog ...

  8. 9 java 笔记

    1 所有的java对象都可以和字符串进行连接运算 2 在java中判断两个变量是否相等时:==运算符适用于基本类型的判断 3 JVM常量池保证相同的字符串直接量只有一个,不会产生多个相同的副本 4 O ...

  9. python制作一个简单词云

    首先需要安装三个包:# 安装:pip install matplotlib# 安装:pip install jieba# 安装pip install wordcloud 1.制作英文字母的词云 效果图 ...

  10. php基本变量

    结构体和联合体 struct(结构体) 和 union(联合体) 结构体是8字节对齐,不够8字节的部分则空出来: 联合体共用一个8字节,共享这8字节的内存,后使用的会覆盖先使用的 结构体和联合体在形式 ...