QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#714248#9540. Double 11rageOfThunder#WA 6ms19496kbC++231.7kb2024-11-05 22:15:272024-11-05 22:15:32

Judging History

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

  • [2024-11-05 22:15:32]
  • 评测
  • 测评结果:WA
  • 用时:6ms
  • 内存:19496kb
  • [2024-11-05 22:15:27]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
long long a,b,c,T,cn,ls[1000001],inf=1e9,an,g[1000001],d[1000001],q,w,sm[1000001],sm1[1000001],fa[21][200001],sm2[1000001],sm3[1000001];
long long sm4[1000001],pr[1000001],lg[1000001],de[1000001],v[1000001];
char s[1000001];
long double dp[1000001];
struct p{long long q,w;}l[1000001];
vector<int> qu[1000001];
long double eps=1e-12;
long double get(long double qq)
{
	long double x=sqrt(qq);
	while (true) {
    long double nx = (x + qq / x) / 2;
    if (abs(x - nx) < eps) break;
    x = nx;
  }
  return x;
}
long long st[1000001];
long double get(long long qq,long long ww)
{
	return dp[qq]+get((sm[ww]-sm[qq])*(ww-qq));
}
long long ch(long double qq)
{
	long long lss=0;
	dp[0]=0;g[0]=0;
	cn=0;
	st[++cn]=0;
	long long L=1;
	for(int i=1;i<=a;i++)
	{
//		while(lss<i-1&&dp[lss]+get((sm[i]-sm[lss])*(i-lss))>dp[lss+1]+get((sm[i]-sm[lss+1])*(i-lss-1))) ++lss;
		while(cn>1&&get(st[cn-1],i)<=get(st[cn],i)) --cn;
		dp[i]=dp[st[cn]]+get((sm[i]-sm[st[cn]])*(i-st[cn]))+qq;
		g[i]=g[st[cn]]+1;
		st[++cn]=i;
//		cout<<i<<" "<<dp[i]<<" "<<lss<<"\n";
	}
	return g[a];
}
int main()
{
	for(int i=1;i<=1000000;i++) lg[i]=lg[i-1]+((1<<lg[i-1])==i);
	for(int i=1;i<=1000000;i++) lg[i]--;
	T=1;
	scanf("%lld%lld",&a,&b);
	for(int i=1;i<=a;i++) scanf("%lld",&d[i]);
	sort(d+1,d+a+1);
	for(int i=1;i<=a;i++) sm[i]=sm[i-1]+d[i];
	long double ll=0,rr=1e12;
	long double ann=0;
	while(rr-ll>=eps)
	{
		long double mid=((ll+rr)/2.0000);
		if(ch(mid)<=b) rr=mid-eps,ann=mid;
		else ll=mid+eps;
	}
	long long hh=ch(ann);
//	cout<<dp[a]<<" "<<g[a]<<"\n";
	ann=dp[a]-b*ann;
	printf("%.10Lf",ann);
	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 6ms
memory: 19496kb

input:

4 2
1 2 3 4

output:

6.1961524227

result:

wrong answer 1st numbers differ - expected: '6.1911471', found: '6.1961524', error = '0.0008085'