QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#703918 | #9540. Double 11 | ucup-team5318# | WA | 1ms | 7976kb | C++14 | 1.5kb | 2024-11-02 18:53:06 | 2024-11-02 18:53:36 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
const long double inf=4e18;
int n,k,a[N];
int ct;
pair<long double,int>f[N];
long double sum[N];
long double ask(int l,int r)
{
return sqrtl((r-l+1)*(sum[r]-sum[l-1]));
}
int q[N],l,r,qv[N];
bool check(long double mid)
{
for(int i=1;i<=n;i++)f[i]={inf,(int)1e9};
f[0]={0,0},l=1,r=1,q[1]=1,qv[1]=0;
for(int i=1;i<=n;i++)
{
int nl=l,nr=r,pos=0;
while(nl<=nr)
{
int mid=nl+nr>>1;
if(i>=q[mid])pos=mid,nl=mid+1;
else nr=mid-1;
}
f[i]={f[qv[pos]].first+ask(qv[pos]+1,i)+mid,f[qv[pos]].second-1};
if(i<n)
{
q[l]++;if(l+1<=r && q[l+1]==q[l])l++;
while(l<=r && make_pair(f[i].first+ask(i+1,q[r]),f[i].second-1)<make_pair(f[qv[r]].first+ask(qv[r]+1,q[r]),f[qv[r]].second-1))r--;
if(l>r)r++,q[r]=i+1,qv[r]=i;
else
{
int nl=q[r],nr=n,pos=0;
while(nl<=nr)
{
int mid=nl+nr>>1;
if(make_pair(f[i].first+ask(i+1,mid),f[i].second-1)<make_pair(f[qv[r]].first+ask(qv[r]+1,mid),f[qv[r]].second-1))pos=mid,nr=mid-1;
else nl=mid+1;
}
if(pos)r++,q[r]=pos,qv[r]=i;
}
}
}
return -f[n].second>=k;
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
long double l=-4e16,r=4e16,ans=0;
for(int o=1;o<=100;o++)
{
long double mid=(l+r)/2;
if(check(mid))ans=mid,l=mid;
else r=mid;
}
check(ans);
printf("%.15Lf\n",f[n].first-ans*k);
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 5940kb
input:
4 2 1 2 3 4
output:
6.191147129557119
result:
ok found '6.191147130', expected '6.191147130', error '0.000000000'
Test #2:
score: 0
Accepted
time: 0ms
memory: 5936kb
input:
10 3 1 2 3 4 5 6 7 8 9 10
output:
22.591625366514129
result:
ok found '22.591625367', expected '22.591625367', error '0.000000000'
Test #3:
score: 0
Accepted
time: 1ms
memory: 7976kb
input:
1 1 1
output:
1.000000000000000
result:
ok found '1.000000000', expected '1.000000000', error '0.000000000'
Test #4:
score: -100
Wrong Answer
time: 0ms
memory: 6000kb
input:
1 1 100000
output:
316.226562500000000
result:
wrong answer 1st numbers differ - expected: '316.2277660', found: '316.2265625', error = '0.0000038'