LibreOJ #6162. 「美団コードM初戦ラウンドA」身体トレーニング【暴力】

2596 ワード

「美団コードM初戦ラウンドA」身体トレーニング
問題の説明
美団出前の配送員は変速走で身体訓練を行う.彼らの訓練の方式は:n人は1列に並んで走って、前後の2人の間はuメートルを隔てて、すべての人の正常な速度はすべてvメートル/秒です.ある配送員が最後に並んだとき、彼はその時の自分の最高速度で前に走って、先頭の人uメートルを超えて、それから元の速度vメートル/秒に戻る必要があります.各人の最初の最高速度はc(i)メートル/秒であり、1ラウンド当たりd(i)メートル/秒減衰し、すなわち、iがj番目に走った場合、彼の速度はc(i)-(j-1)である.×d(i)メートル/秒.n個人は最初にランダムな順序で並べられ、各順序の確率は完全に等しく、1ラウンド(誰もが先頭に追いつき、シーケンスが元に戻る)を走るのに必要な時間はいくらですか.
入力データ
第1行の整数n、実数v、実数u;2行目n個の実数一人当たりの速度c(i);3行目のn個の実数値の各人の減衰量d(i);入力データは、一人一人の速度が≦vに減衰しないことを保証します.
出力データ
答えは3桁の小数を残します.
入力サンプル
10 37.618 0.422 72.865 126.767 202.680 106.102 99.516 134.418 167.952 173.646 120.210 136.571 2.941 3.664 7.363 4.161 0.246 8.046 5.521 7.473 7.178 5.649
出力サンプル
0.815
データ範囲
n≦1000,v≦100,u≦10 c(i)≦50000,d(i)≦10入力データは,各人の速度が≦vに減衰しないことを保証する
問題解
とても水の小さい問題、列挙iはその点で始まり、それから期待すればいいです.
コードは次のとおりです.
#include
using namespace std;
int n;
double v,u,c[1005],d[1005],Ans;
int main(){
    scanf("%d%lf%lf",&n,&v,&u);
    for(int i=1;i<=n;i++) scanf("%lf",&c[i]);
    for(int i=1;i<=n;i++) scanf("%lf",&d[i]);
    for(int i=1;i<=n;i++){
        double Now=0;
        for(int j=1;j<=n;j++) Now+=(u*(double)n)/(c[i]-d[i]*(j-1)-v);
        Now/=n;Ans+=Now;
    }
    printf("%.3lf",Ans);
    return 0;
}

転載先:https://www.cnblogs.com/XSamsara/p/9059390.html