zoukankan      html  css  js  c++  java
  • BZOJ 1011: [HNOI2008]遥远的行星( )

    因为允许5%的误差..把连续一段的j-i看作一个数..然后记个前缀和就好了... 

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

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
     
    using namespace std;
     
    typedef long long ll;
     
    const int maxn = 100009;
     
    ll M[maxn];
    int N;
    double A;
     
    void Solve(int l, int r, int p) {
    double ans = 0;
    if(r - l <= 200) {
    for(; l <= r; l++)
    ans += (double) (M[l] - M[l - 1]) / (p - l);
    } else {
    while(l <= r) {
    int _r = min(r, l + 200);
    ans += (double) (M[_r] - M[l - 1]) / (p - (l + _r) / 2);
    l = _r + 1;
    }
    }
    printf("%.7lf ", ans * (M[p] - M[p - 1]));
    }
     
    int main() {
    scanf("%d%lf", &N, &A);
    M[0] = 0;
    for(int i = 1; i <= N; i++) {
    scanf("%lld", M + i);
    M[i] += M[i - 1];
    }
    for(int i = 1; i <= N; i++)
    Solve(1, floor(A * i), i);
    return 0;
    }

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

    1011: [HNOI2008]遥远的行星

    Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge
    Submit: 2869  Solved: 1031
    [Submit][Status][Discuss]

    Description

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

    Input

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

    Output

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

    Sample Input

    5 0.3
    3
    5
    6
    2
    4

    Sample Output

    0.000000
    0.000000
    0.000000
    1.968750
    2.976000

    HINT

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

    Source

  • 相关阅读:
    BOM-Window窗口对象
    BOM
    案例:电灯开关
    事件简单学习
    简单学习
    ECMAScript基本对象——Global全局对象
    ECMAScript基本对象——RegExp 正则表达式对象
    ECMAScript基本对象——String 对象
    zk安装管理
    kafka服务器批量copy文件脚本
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/5008343.html
Copyright © 2011-2022 走看看