求调 ABC F

学术版

diqiuyi @ 2023-12-23 22:08:00

rt,WA 了 7 个点

#include <bits/stdc++.h>
using namespace std;
inline int read(){
    int x=0;bool f=1;char c=getchar();
    while(c>'9'||c<'0'){if(c=='-')f=0;c=getchar();}
    while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
    return f?x:-x;
}
long double f[200005],sum[200005];
int n,k,sx,sy,x[200005],y[200005],q[200005],head=1,tail;
inline long double dis(int p){
    return sqrtl(1ll*(x[p]-sx)*(x[p]-sx)+1ll*(y[p]-sy)*(y[p]-sy));
}
inline long double d2(int p,int pp){
    return sqrtl(1ll*(x[p]-x[pp])*(x[p]-x[pp])+1ll*(y[p]-y[pp])*(y[p]-y[pp]));
}
int main(){
//  cout<<sqrtl(18)<<'\n';
    n=read(),k=read(),sx=read(),sy=read();
    x[0]=sx,y[0]=sy;
    for(int i=1;i<=n;i++)
        x[i]=read(),y[i]=read(),sum[i]=sum[i-1]+d2(i-1,i);
//  cout<<d2(1,2)<<endl;
    for(int i=1;i<=n;i++){
        while(head<=tail&&q[head]<i-k) head++;
        if(i<=k) f[i]=sum[i];
        else f[i]=sum[i]-sum[q[head]]+f[q[head]]+dis(q[head])+dis(q[head]+1)-d2(q[head],q[head]+1);
        while(head<=tail&&dis(i)+dis(i+1)-d2(i,i+1)<dis(q[tail])+
        dis(q[tail]+1)-d2(q[tail],q[tail]+1)) tail--;
        q[++tail]=i; 
    }
    cout<<fixed<<setprecision(8)<<f[n]+d2(n,0)<<'\n';
    return 0;
}

by Struct_Sec @ 2023-12-23 22:20:30

你乘1ll干嘛,精度不要了?


by Struct_Sec @ 2023-12-23 22:24:30

虽然但是,好像也不是精度的问题


|