Wa on #16
查看原帖
Wa on #16
815957
apple_vinegar楼主2024/8/8 10:07
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+5;
int n,k;
 double d[N][N][2],maxn=-1e9-5;
int num[N];
struct {
	double x,y;
}a[N];
struct node{
	int l,r,idx;
}fa[N][N][2];
node now;
double dist(int x,int y){
	return sqrt(((a[x].x-a[y].x)*(a[x].x-a[y].x))+((a[x].y-a[y].y)*(a[x].y-a[y].y))); 
} 

int mod(int a){
	if(a>n) return a%n;
	else if(a<=0) return a+n;
	else return a;
}

void work(){
	for(int i=0;i<=n;i++){
		for(int j=0;j<=n;j++) d[i][j][0]=d[i][j][1]=1e17;
	}
	d[0][0][0]=d[0][0][1]=0;
	for(int i=1;i<n;i++){
		for(int l=0;l<=i;l++){
			int r=i-l;
			if(l && d[l][r][0]>d[l-1][r][0]+dist(mod(k+l),mod(k+l-1))) d[l][r][0]=d[l-1][r][0]+dist(mod(k+l),mod(k+l-1)),fa[l][r][0]=(node){l-1,r,0};
			if(l && d[l][r][0]>d[l-1][r][1]+dist(mod(k+l),mod(k-r))) d[l][r][0]=d[l-1][r][1]+dist(mod(k+l),mod(k-r)),fa[l][r][0]=(node){l-1,r,1};
			if(r && d[l][r][1]>d[l][r-1][0]+dist(mod(k-r),mod(k+l)))d[l][r][1]=d[l][r-1][0]+dist(mod(k-r),mod(k+l)),fa[l][r][1]=(node){l,r-1,0};
			if(r && d[l][r][1]>d[l][r-1][1]+dist(mod(k-r),mod(k-r+1))) d[l][r][1]=d[l][r-1][1]+dist(mod(k-r),mod(k-r+1)),fa[l][r][1]=(node){l,r-1,1};			
//			cout<<l<<' '<<r<<' '<<d[l][r][0]<<' '<<d[l][r][1]<<endl;
		}
	}
//	for(int i=1;i<n;i++){
//		for(int l=0;l<=i;l++){
//			int r=i-l;
//			cout<<l<<' '<<r<<' '<<d[l][r][0]<<' '<<d[l][r][1]<<endl;
//		}
//		cout<<"~~~~~~~~~~~"<<endl;
//	}
	int ans=1e17;
	for(int l=0;l<n;l++){
		int r=n-l-1;
		if(ans>d[l][r][0]){
			ans=d[l][r][0];
			now=(node){l,r,0};
		}
		if(ans>d[l][r][1]){
			ans=d[l][r][1];
			now=(node){l,r,1};
		}
	}
	int i=0;
	while(now.l || now.r){
		i++;
		if(now.idx) num[i]=mod(k-now.r);
		else num[i]=mod(k+now.l);
		now=fa[now.l][now.r][now.idx];
	} 
	for(i;i;i--){
		cout<<num[i]<<" ";
	}
}

signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%lf%lf",&a[i].x,&a[i].y);
		if(a[i].y>maxn) maxn=a[i].y,k=i;
	}
	cout<<k<<" "; 
	work(); 
	return 0; 
}

expected = 9995105.659828, found = 9995105.912659

2024/8/8 10:07
加载中...