QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#714248 | #9540. Double 11 | rageOfThunder# | WA | 6ms | 19496kb | C++23 | 1.7kb | 2024-11-05 22:15:27 | 2024-11-05 22:15:32 |
Judging History
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'