QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#717324#9540. Double 11kjhhjkiWA 1ms5952kbC++201.5kb2024-11-06 17:37:042024-11-06 17:37:05

Judging History

你现在查看的是最新测评结果

  • [2024-11-06 17:37:05]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5952kb
  • [2024-11-06 17:37:04]
  • 提交

answer

#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=(k);++i)
#define MAXN 1000005
typedef long double ld;
typedef long long ll;
int n,m,st,ed;
ll a[MAXN],sum[MAXN];
std::pair<ld,int> f[MAXN];
struct data{int pos,l,r;}seq[MAXN];
inline std::pair<ld,int> getval(int x,int y,ld k){
    return std::make_pair(f[y].first+sqrtl((x-y)*(sum[x]-sum[y]))+k,f[y].second-1);
}
inline std::pair<ld,int> calc(ld k){
    st=1,ed=0;
    seq[++ed]=((data){0,1,n});
    rep(i,1,n){
        while(seq[st].r<i) ++st;
        f[i]=getval(i,seq[st].pos,k);
        while(st<=ed&&getval(seq[ed].l,i,k)<=getval(seq[ed].l,seq[ed].pos,k)) --ed;
        if(st<=ed){
            int tl=seq[ed].l,tr=seq[ed].r;
            while(tl<tr){
                int tmid=tl+tr+1>>1;
                if(getval(tmid,i,k)<=getval(tmid,seq[ed].pos,k)) tr=tmid-1;
                else tl=tmid;
            }
            seq[ed].r=tl;
            if(tl!=n) seq[++ed]=(data){i,tl+1,n};
        }
        else seq[++ed]=(data){1,i+1,n};
    }
    return std::make_pair(f[n].first,-f[n].second);
}
inline ld solve(){
    ld l=0,r=1e15;
    while(r-l>1e-15){
        ld mid=(l+r)/2;
        if(calc(mid).second>=m) l=mid;
        else r=mid;
    }
    return calc((l+r)/2).first-m*(l+r)/2;
}
int main(){
    std::ios::sync_with_stdio(0);
    std::cin.tie(0),std::cout.tie(0);
    std::cin>>n>>m;
    rep(i,1,n) std::cin>>a[i];
    std::sort(a+1,a+n+1);
    rep(i,1,n) sum[i]=sum[i-1]+a[i];
    std::cout<<std::fixed<<std::setprecision(10)<<solve()<<'\n';
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5864kb

input:

4 2
1 2 3 4

output:

6.1911471296

result:

ok found '6.191147130', expected '6.191147130', error '0.000000000'

Test #2:

score: 0
Accepted
time: 1ms
memory: 5932kb

input:

10 3
1 2 3 4 5 6 7 8 9 10

output:

22.5916253665

result:

ok found '22.591625367', expected '22.591625367', error '0.000000000'

Test #3:

score: 0
Accepted
time: 1ms
memory: 5952kb

input:

1 1
1

output:

1.0000000000

result:

ok found '1.000000000', expected '1.000000000', error '0.000000000'

Test #4:

score: -100
Wrong Answer
time: 1ms
memory: 5856kb

input:

1 1
100000

output:

316.2277832031

result:

wrong answer 1st numbers differ - expected: '316.2277660', found: '316.2277832', error = '0.0000001'