bzoj1011: [HNOI2008]遥远的行星

其实我觉得有些题不会做见见世面也是挺好的。。//蒟蒻本性

用一个T,在T范围的暴力求出,T范围之外的因为比较小所以近似。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn = 100000 + 10;
const int T = 100;
const double eps = 1e-8;

int m[maxn],n,l,r;
double f[maxn],a;

int main() {
    scanf("%d %lf",&n,&a);
    for(int i=1;i<=n;i++) scanf("%d",&m[i]);
    for(int i=1;i<=T;i++) {
        f[i]=0;
        r = (int)(eps+floor(a*i));
        for(int j=1;j<=r;j++) f[i] += 1.0*m[i]*m[j]/(i-j);
    }
    
    for(int i=T+1;i<=n;i++) {
        f[i]=0;
        r = (int)(eps+floor(a*i));
        l = (int)(eps+floor(a*(i-T)));
        for(int j=l+1;j<=r;j++) f[i] += 1.0*m[i]*m[j]/(i-j);
        f[i] += 1.0*m[i]*(f[i-T]/m[i-T])*(i-T-0.5*l)/(i-0.5*l);
    }
    
    for(int i=1;i<=n;i++)
        printf("%.6lf\n",f[i]);
    return 0;
}
posted @ 2016-04-24 10:49  invoid  阅读(159)  评论(0编辑  收藏  举报