QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#703918#9540. Double 11ucup-team5318#WA 1ms7976kbC++141.5kb2024-11-02 18:53:062024-11-02 18:53:36

Judging History

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

  • [2024-11-02 18:53:36]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:7976kb
  • [2024-11-02 18:53:06]
  • 提交

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'