济南学习D2T2__数学分析题
【问题描述】
有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__数学分析题的更多相关文章
- 《Data Structures and Algorithm Analysis in C》学习与刷题笔记
<Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...
- C语言编程学习打造——做题游戏
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 济南学习D3T1__线性筛和阶乘质因数分解
[问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...
- 济南学习D2T1__折纸带
他[问题描述]一张长度为n的纸带,我们可以从左至右编号为0 −n(纸带最左端标号为0) .现在有m次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带的长度是多少.[输入格式]第一行两个数字n, ...
- 济南学习 Day 3 T2 am
看程序写结果(program)Time Limit:1000ms Memory Limit:64MB题目描述LYK 最近在准备 NOIP2017 的初赛,它最不擅长的就是看程序写结果了,因此它拼命地在 ...
- $2018/8/19 = Day5$学习笔记 + 杂题整理
\(\mathcal{Morning}\) \(Task \ \ 1\) 容斥原理 大概这玩意儿就是来用交集大小求并集大小或者用并集大小求交集大小的\(2333\)? 那窝萌思考已知\(A_1,A_2 ...
- python模块学习第 0000 题
将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...
- NLP传统基础(2)---LDA主题模型---学习文档主题的概率分布(文本分类/聚类)
一.简介 https://cloud.tencent.com/developer/article/1058777 1.LDA是一种主题模型 作用:可以将每篇文档的主题以概率分布的形式给出[给定一篇文档 ...
- 【笔记篇】不普及向——莫比乌斯反演学习笔记 && 栗题HAOI2011 Problem B
Part0 广告(当然没有广告费) P.S. 这篇文章是边学着边用Typora写的...学完了题A了blog也就呼之欲出了~有latex化式子也非常方便...非常建议喜欢Markdown的dalao们 ...
随机推荐
- Android——配置文件的保存SharedPreferences进行数据存储
很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果 ...
- 一些上流的CSS3图片样式
直接在图片元素上直接应用CSS3 inset box-shadow 或 border-radius时,浏览器并不能完美的渲染它们.不过,如果把这个图片用作背景图,你就可以可以给它添加任何样式了,浏览器 ...
- Spring加载resource时classpath*:与classpath:的区别
http://blog.csdn.net/kkdelta/article/details/5507799 classpath: 第一个匹配的 classpath*:多个组件中的可匹配的
- HTML、html
1.HTTPS(超文本传输协议,HyperText Transfer Protocol) 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息.HTTP协议以明文方式发 ...
- unity, scene视图查看场景时应调成正交模式
scene视图查看场景时应调成正交模式,以避免稍微滑动滚轮就导致视角过远或过近.
- 【python】删除1~100的素数
def delPrime(x): if x==1: return True for y in range(2,x): if x%y==0: return True return False x1=ra ...
- DCM TUTORIAL – AN INTRODUCTION TO ORIENTATION KINEMATICS (REV 0.1)
原英文地址:dcm_tutorial 感觉这篇文章还是很有学习价值的,所以就抽出了一些时间对本文进行的翻译.下面这个好多人用的算法就是一种DCM 滤波器. //==================== ...
- oracle控制文件丢失恢复
在学习群里有个同学误删除了控制文件,于是我也把自己数据库的控制文件删除了,看看能不能进行恢复,以下是整个实验的过程~~在做之前,先看看控制文件的备份方式:1.生成可以重建控制文件的脚本.2.备份二进制 ...
- JAVA 新手问题: Request 编码编译出错,Unhandled exception type UnsupportedEncodingException
新手: 编写如下代码 private void Exec(HttpServletRequest Req,HttpServletResponse Response) //throws ServletEx ...
- lintcode-【简单题】快乐数
题目: 写一个算法来判断一个数是不是"快乐数". 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是 ...