【普及模拟】数列
题目描述
给定一个长度为N的数列,求一段连续的子数列满足该子数列中的各元素的平均数大于A,输出可行方案的总数。
输入
第一行两个整数N,A
接下来N个整数,代表数列的N个元素。
输出
一个整数,即可行的方案数。
样例输入
5 1
1 2 3 4 5
样例输出
14
数据范围限制
数据规模
对于60%的数据 N <= 1000
对于100%的数据 N <= 100000
所有数据包括都在longint范围内。
分析:这道题我没有AC,只有六十分
60%:
我们只需要在输入是预处理一下(前缀和)。
然后用双重循环暴力枚举起点和终点,即可。
code:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
long long b[100010],qzh[100010];
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
memset(qzh,0,sizeof(qzh));
int n,a,ans=0;
cin>>n>>a;
for(int i = 1;i <= n;i++)
{
cin>>b[i];
b[i]-=a;
qzh[i]=qzh[i-1]+b[i];
}
for(int i = 1;i <= n;i++)
if(qzh[i]>0) ans++;
for(int i = n;i >= 2;i--)
for(int j = 1;j <= i-1;j++)
if(qzh[i]>qzh[j]) ans++;
cout<<ans<<endl;
return 0;
}