社区讨论

关于今晚的F题

学术版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lqi43lsi
此快照首次捕获于
2023/12/23 21:44
2 年前
此快照最后确认于
2023/12/24 08:39
2 年前
查看原帖
一直只WA第5个点,有没有大佬看看这是怎么回事
代码:
CPP
#include<bits/stdc++.h>
#define int long long
#define pb emplace_back
#define mk make_pair
#define fi first
#define se second
#define pii pair<int,int>
using namespace std;
const int N=5e5+5,mod=998244353;
int n,k;
long double a[N][2];
long double sum[N];
long double dis(int i,int j){
	long double x=a[i][0],y=a[i][1],sx=a[j][0],sy=a[j][1];
	long double s=x>sx?x-sx:sx-x;
	long double ss=y>sy?y-sy:sy-y;
	return 1.0*sqrtl(s*s+ss*ss);
}
long double dp[N];
long double now[N],l,r;
long double tr[N<<2],lz[N<<2];
void pushdown(int x){
	if(lz[x]){
		tr[x<<1]+=lz[x];
		tr[x<<1|1]+=lz[x];
		lz[x<<1]+=lz[x];
		lz[x<<1|1]+=lz[x];
		lz[x]=0;
	}
}
void upt(int l,int r,int fl,int fr,long double k,int x){
	if(fl<=l && r<=fr){
		tr[x]=tr[x]+k;
		lz[x]=lz[x]+k;
		return;
	}
	int mid=l+r>>1;
	pushdown(x);
	if(fl<=mid) upt(l,mid,fl,fr,k,x<<1);
	if(fr>mid) upt(mid+1,r,fl,fr,k,x<<1|1);
	if(tr[x<<1]<tr[x<<1|1]) tr[x]=tr[x<<1];
	else tr[x]=tr[x<<1|1];
}
long double mn=LDBL_MAX;
void query(int l,int r,int fl,int fr,int x){
	if(fl<=l && r<=fr){
		mn=min(mn,tr[x]);
		return;
	}
	int mid=l+r>>1;
	pushdown(x);
	if(fl<=mid) query(l,mid,fl,fr,x<<1);
	if(fr>mid) query(mid+1,r,fl,fr,x<<1|1);
}
signed main(){
	cin>>n>>k>>a[0][0]>>a[0][1];
	for(int i=1;i<=n;i++){
		cin>>a[i][0]>>a[i][1];
	}
	for(int i=2;i<=n;i++){
		sum[i]=sum[i-1]+dis(i,i-1);
	}
	if(k==1){
		long double ans=0;
		for(int i=1;i<=n;i++) ans=ans+dis(i,0)*2.0;
		cout<<fixed<<setprecision(11)<<ans;
		return 0;
	}
	upt(1,n,1,1,dis(1,0),1);
	for(int i=1;i<n;i++){
		mn=LDBL_MAX;
		query(1,n,max(1ll,i-k+1),i,1);
		dp[i+1]=mn+dis(i,0)+dis(i+1,0);
		upt(1,n,i+1,i+1,dp[i+1],1);
		upt(1,n,1,i,dis(i,i+1),1);
	}
	long double ans=LDBL_MAX;;
	for(int i=n;i>=max(1ll,n-k+1);i--){
		long double x=dp[i]+sum[n]-sum[i];
		if(ans>x) ans=x;
	}
	ans=ans+dis(n,0);
	cout<<fixed<<setprecision(11)<<ans;
	return 0;
}
/*

*/

回复

3 条回复,欢迎继续交流。

正在加载回复...