【问题描述】

有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. 【xlwings】 wps 和 office 的excel creat_sheet区别

    最近在学习 xlwings,参考学习的网址:https://www.jianshu.com/p/b534e0d465f7 写得很棒,学到了很多. 在新建sheet表单, 发现一个问题. import ...

  2. T100——接口代码记录,jsonArray和json

    {<section id="cs_t1client.description" >} #應用 a00 樣板自動產生(Version:) #+ Version..: T10 ...

  3. GCN代码分析 2019.03.12 22:34:54字数 560阅读 5714 本文主要对GCN源码进行分析。

    GCN代码分析   1 代码结构 . ├── data // 图数据 ├── inits // 初始化的一些公用函数 ├── layers // GCN层的定义 ├── metrics // 评测指标 ...

  4. 项目实践 hrm项目的设计过程

    人事管理系统的设计过程 一.数据库表和持久化类 1.1   进行需求分析,根据功能模块设计数据库表 1.2   设计持久化实体 面向对象分析,即根据系统需求提取出应用中的对象,将这些对象抽象成类,再抽 ...

  5. Visual Studio 2012网站如何只生成一个DLL文件

    简介: 在Visual Studio 2005,2008,2010版本中,都有Web Deployment工具将网站进行发布,所有代码文件和库文件发布,生成为一个动态链接库文件,而在Visual St ...

  6. windows安装npm教程

    1.在使用之前,先类掌握3个东西,明白它们是用来干什么的: npm:  nodejs 下的包管理器. webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的 ...

  7. shell、bash、terminal和kernel之间的关系

    shell.bash.terminal和kernel之间的关系 本文是<鸟哥的Linux私房菜>的学习笔记 什么是kernel kernel的中文是"操作系统核心",主 ...

  8. O043、计算节点宕机了怎么办

    参考https://www.cnblogs.com/CloudMan6/p/5562131.html   Rebuild 可以恢复损坏的instance .那如果是宿主机坏了怎么办呢?比如硬件故障或者 ...

  9. 12 Mysql之工作中常用操作

    Mysql 专题讲解 一.用户创建与权限管理 a)  创建和删除用户 创建用户: CREATE USER jack@localhost; UPDATE USER SET password=passwo ...

  10. cube打包后css顺序错误

    先说下解决办法: 把import {...} from cube-ui放在 import App from './App.vue'的前面 不然会产生如下错误 正确的顺序