平均值I

 

 宁波市第31届中小学生计算机程序设计竞赛

 

问题 E: 平均值I

题目描述

豆豆从小对数字很敏感,小学里就显露出超常的能力,老师为了防止他太过骄傲,给了他一个可怕的难题:求一串给定整数某一段的平均值,保留3位小数。每个整数都是小于231的。老师做梦也没想到豆豆全都回答出来了,原来豆豆有一个擅长编程的朋友你。
 

输入

第一行一个整数N(1<=N<=100000),表示一串整数的个数;
第二行用空格隔开的N个非负整数;
第三行一个整数M(1<=M<=100000),表示M次询问;
接下来M行,每行两个整数i和j(1<=i,j<=N),表示询问第i个到第j个整数的平均值,不保证i<j。

输出

M行,每行一个小数,表示平均值,要求小数点后面保留3位输出。

样例输入

5 
0 25 0 23 2 
1 
1 5

样例输出

10.000

提示

数据保证N个整数和小于263

 

----------------------------------------------2018-10-28-------

-行吧,以前写的并不是树状数组,嘛,能A就行,其实这题直接存前缀和就行

----------------------------------------------------------------------------------------------------

本题Ac代码

#include<bits/stdc++.h>
#define forr(i,n) for(int i=0;i<n;i++)
#define ms(a) memset(a,0,sizeof(a))
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
ll a[100005];
double ans[100005];
ll sss(ll x)
{
    if(x==1)
        return a[1];
    if(x%2)
        return a[x]+a[x-1];
    return a[x];
}
ll ss(ll x,ll y)//求和
{
    if(!x)
        return sss(y);
    return sss(y)-sss(x-1);
}
int main()
{
    ms(a),ms(ans);
    ll n,m;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        ll t;
        cin>>t;
        if(i%2)
            a[i]=t;
        else
        {
            a[i]=a[i-2]+a[i-1]+t;
        }
    }
    cin>>m;
    forr(i,m)
    {
        ll x,y;
        cin>>x>>y;
        if(x>y)
        {
            ll tem=x;
            x=y,y=tem;
        }
        ans[i]=ss(x,y);
        ans[i]/=(y-x+1);
    }
    forr(i,m)printf("%.3lf\n",ans[i]);
    //forr(i,n)
    //printf("%d\t",a[i+1]);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值