【问题描述】
有?个数,随机选择一段区间,如果这段区间的所有数的平均值在[?, ?]中则
你比较厉害。求你比较厉害的概率。
【输入格式】
第一行有三个数?, ? , ?,含义如上描述。
接下来一行有?个数代表每一个数的值。
【输出格式】
输出一行一个分数
?
?
代表答案,其中? , ?互质。 如果答案为整数则直接输出该
整数即可。
【样例输入 1】
4 2 3
3 1 2 4
【样例输出 1】
7/10
【样例输入 2】
4 1 4
3 1 2 4
【样例输出 2】
1
【数据规模与约定】
对于30%的数据,1 ≤ ? ≤ 10^4。
对于60%的数据,1 ≤ ? ≤ 10^5。
对于100%的数据,1 ≤ ? ≤ 5 × 10^5, 0 < ? ≤ ? ≤ 100。
记录:因为int忘了强转double 30 分 变 10 分。 int赋值给double也要强转!!!
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
long long sum[550000];
int num[550000];
int fz=0,fm=0;
int n,l,r;
int main()
{
freopen("jian.in","r",stdin);
freopen("jian.out","w",stdout);
scanf("%d%d%d",&n,&l,&r);
for(int i=1;i<=n;i++)
{
fm+=i;
scanf("%d",&num[i]);
}
for(int i=1;i<=n;i++)
sum[i]=sum[i-1]+num[i];
int t=1;
double s=0;
while (t<=n)
{
for(int i=t;i<=n;i++)
{
s=(double)(sum[i]-sum[i-t])/t; //就这
if(s>=l&&s<=r)
fz++;
}
t++;
}
if(fz==0)
puts("0");
else
{
long long gys=__gcd(fz,fm);
//cout<<gys<<" "<<endl;
fz/=gys;fm/=gys;
//cout<<fz<<" ss "<<fm<<endl;
if(fz==fm) puts("1");
else cout<<fz<<"/"<<fm;
}
fclose(stdin);
fclose(stdout);
return 0;
}