[HNOI2008]遥远的行星

https://www.luogu.org/problem/show?pid=3198

小于500的挨着算

大于的分母取平均值

#include<cstdio>
using namespace std;
double m[100005],sum[100005];
int main()
{
    int n;
    double a,ans;
    scanf("%d%lf",&n,&a);
    for(int j=1;j<=n;j++)
    {
        int i=(int)(a*j+1e-8);
        scanf("%lf",&m[j]);
        ans=0;
        if(j<=500)
            for(int k=1;k<=i;k++) ans+=m[k]*m[j]/(j-k);
        else ans=sum[i]*m[j]/(j-0.5*i);
        printf("%lf\n",ans);
        sum[j]=sum[j-1]+m[j];
    }
}

 

题目描述

直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用。请计算每颗行星的受力,只要结果的相对误差不超过5%即可.

输入输出格式

输入格式:

 

第一行两个整数N和A. 1<=N<=10^5.0.01< a < =0.35,接下来N行输入N个行星的质量Mi,保证0<=Mi<=10^7

 

输出格式:

 

N行,依次输出各行星的受力情况

 

输入输出样例

输入样例#1:
5 0.3
3
5
6
2
4
输出样例#1:
0.000000
0.000000
0.000000
1.968750
2.976000

说明

精确结果应该为0 0 0 2 3,但样例输出的结果误差不超过5%,也算对

posted @ 2017-09-17 08:28  TRTTG  阅读(203)  评论(0编辑  收藏  举报