【问题描述】
有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≤ 10 5
对于100%的数据,1 ≤ N≤ 5× 10 5 ,0 < L ≤ R ≤ 100。

______________________________________________________________________

很神奇的数学题,难在推公式,并把公式和信息学的东西联系起来。这是信息题吗?算是数学信息题吧!!!

推理过程:

1、求区间平均值在【l,r】间的概率

2、求平均值在[l,r]间的个数,在除以n(n+1)就可以了

3、[l,r]间的个数=小于等于r的个数-小于l的个数

4、小于l可以表示为(a[i]+a[i+1]+a[i+2]+……+a[i+k-1])/k<l

  继续推出(a[i]+a[i+1]+a[i+2]+……+a[i+k-1])<l*k

  再推出(a[i]+a[i+1]+a[i+2]+……+a[i+k-1])-l*k<0

  再再推出(a[i]-l+a[i+1]-l+a[i+2]-l+……+a[i+k-1]-l)<0

  让数组b[i]=a[i]-l;

  公式变为b[i]+b[i+1]+b[i+2]+……+b[i+k-1]<0

  用前缀和维护可得:s[i+k-1]-s[i-1]<0;

  这是什么?逆序对!!!逆序对的个数就是小于l的个数

  同理求出小于等于r的个数。差,OK!

  神啊!再让我做一遍,我还是做不出来!!!

______________________________________________________________________

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std;
long long n,l,r,ans1,ans2;
long long a[],b[],c[],d[];
void readlong(long long &x)
{
char c=getchar();
int fh=;
for(;c>''||c<'';c=getchar())if(c=='-')fh*=-;
x=;
for(;c<=''&&c>='';c=getchar())x=x*+c-'';
x=x*fh;
} void nxd1(long long l,long long r)
{
if(l==r)return;
long long mid=(l+r)/;
nxd1(l,mid);nxd1(mid+,r);
long long z=l,y=mid+,x=l;
while(z<=mid&&y<=r)
{
if(b[z]>b[y])
{
ans1+=mid-z+;
d[x++]=b[y];y++;
}
else
{
d[x++]=b[z];z++;
}
}
while(z<=mid)
{
d[x++]=b[z];z++;
}
while(y<=r)
{
d[x++]=b[y];y++;
}
memcpy(b+l,d+l,(r-l+)*);
}
void nxd2(long long l,long long r)
{
if(l==r)return;
long long mid=(l+r)/;
nxd2(l,mid);nxd2(mid+,r);
long long z=l,y=mid+,x=l;
while(z<=mid&&y<=r)
{
if(c[z]>=c[y])
{
ans2+=mid-z+;
d[x++]=c[y];y++;
}
else
{
d[x++]=c[z];z++;
}
}
while(z<=mid)
{
d[x++]=c[z];z++;
}
while(y<=r)
{
d[x++]=c[y];y++;
}
memcpy(c+l,d+l,(r-l+)*);
}
int main()
{
freopen("jian.in","r",stdin);
freopen("jian.out","w",stdout);
readlong(n);readlong(l);readlong(r);
for(long long i=;i<=n;i++)
{
readlong(a[i]);
b[i]=b[i-]+a[i]-l;
c[i]=c[i-]+a[i]-r;
}
ans1=;nxd1(,n);
ans2=;nxd2(,n);
ans2-=ans1;
ans1=n*(n+)/;
if(ans2==)
{
cout<<""<<endl;return ;
}
if(ans2==ans1)
{
cout<<""<<endl;return ;
}
long long g=__gcd(ans1,ans2);
cout<<ans2/g<<"/"<<ans1/g<<endl;
fclose(stdin);
fclose(stdout);
return ;
}

济南学习D2T2__数学分析题的更多相关文章

  1. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  2. C语言编程学习打造——做题游戏

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  3. 济南学习D3T1__线性筛和阶乘质因数分解

    [问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...

  4. 济南学习D2T1__折纸带

    他[问题描述]一张长度为n的纸带,我们可以从左至右编号为0 −n(纸带最左端标号为0) .现在有m次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带的长度是多少.[输入格式]第一行两个数字n, ...

  5. 济南学习 Day 3 T2 am

    看程序写结果(program)Time Limit:1000ms Memory Limit:64MB题目描述LYK 最近在准备 NOIP2017 的初赛,它最不擅长的就是看程序写结果了,因此它拼命地在 ...

  6. $2018/8/19 = Day5$学习笔记 + 杂题整理

    \(\mathcal{Morning}\) \(Task \ \ 1\) 容斥原理 大概这玩意儿就是来用交集大小求并集大小或者用并集大小求交集大小的\(2333\)? 那窝萌思考已知\(A_1,A_2 ...

  7. python模块学习第 0000 题

    将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...

  8. NLP传统基础(2)---LDA主题模型---学习文档主题的概率分布(文本分类/聚类)

    一.简介 https://cloud.tencent.com/developer/article/1058777 1.LDA是一种主题模型 作用:可以将每篇文档的主题以概率分布的形式给出[给定一篇文档 ...

  9. 【笔记篇】不普及向——莫比乌斯反演学习笔记 && 栗题HAOI2011 Problem B

    Part0 广告(当然没有广告费) P.S. 这篇文章是边学着边用Typora写的...学完了题A了blog也就呼之欲出了~有latex化式子也非常方便...非常建议喜欢Markdown的dalao们 ...

随机推荐

  1. javaScript DOM JQuery AJAX

    http://www.cnblogs.com/wupeiqi/articles/5369773.html 一 JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript ...

  2. ExtAspNet和FineUI未将对象引用设置到对象的实例

    要在web.config中加入 <configSections> <section name="ExtAspNet" type="ExtAspNet.C ...

  3. Linux下编译安装PCRE库

    备注:如果没有root权限,使用 --prefix 指定安装路径 ./configure --prefix=/home/work/tools/pcre-8.xx =================== ...

  4. RocketMQ安装与部署说明

    一.安装说明1.下载安装包,下载地址:https://github.com/alibaba/RocketMQ/releases/download/v3.1.7/alibaba-rocketmq-3.1 ...

  5. make自动生成依赖文件的两种形式

    最近编译源文件发现当修改头文件后,make并不会自动把包含此头文件的所有源文件重新编译,而每次都是需要把对应的中间文件清除才能重新编译,非常的麻烦.因此需要make自动对源文件所依赖的头文件进行管理, ...

  6. javascript性能优化总结一(转载人家)

    一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己不擅于 ...

  7. Perl删除数组中元素的多种方法

    Perl中的数组元素起始引用序号为0,@array的第一个元素为$array[0],依次递增,最后一个元素为$array[-1]或者$#array.如果要删除一个数组中已有的元素,可以用以下几个函数来 ...

  8. webpack +vue开发(1)

    首先安装 node.js这是毋庸置疑的,安装完了之后安装webpack npm install webpack -g 接下来创建一个自己的文件夹 webpack-learn在里面创建一个index.h ...

  9. 写了一个自动打包并发布到tomcat的脚本

    #!/bin/sh #获取tomcat的PID tomcat_pid=` | awk '{print $1}'`#判断tomcat是否结束,未结束则kill掉 if [ -z $tomcat_pid ...

  10. (medium)LeetCode 278.First Bad Version

    You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...