如果早知道,T3限时暴力可以得75pts……
查看原帖
如果早知道,T3限时暴力可以得75pts……
475403
Redshift_Shine楼主2023/3/10 17:51

rt,本人在两天前加入洛谷比赛(我没去参加比赛本身),得了210分,T3没做,然后比赛后想出这么个疯狂的办法然后得了75分……

#include<iostream>
#include<cmath>
#include<random>
#include<algorithm>
using namespace std;
clock_t cl;
int n,tmp;
double cur;
random_device rd;
const int N=1e4+10;
struct st{
	int id;
	double first,second;
	bool operator<(const st& x){
		return second>x.second;
	}
};
inline double dis(st a,st b){
	return sqrt(abs(a.first-b.first)*abs(a.first-b.first)+abs(a.second-b.second)*abs(a.second-b.second));
}
st pos[N];
vector<int> tra;
int main(){
	cl=clock();
	scanf("%d",&n);
	if(!n)return 0;
	scanf("%lf%lf",&pos[1].first,&pos[1].second);
	pos[1].id=1;
	for(int i=2;i<=n;i++){
		scanf("%lf%lf",&pos[i].first,&pos[i].second);
		pos[i].id=i;
	}
	sort(pos+1,pos+n+1);
	tra.push_back(0);
	tra.push_back(pos[1].id);
	for(int i=2;i<=n;i++){
		cur+=dis(pos[i],pos[i-1]);
		tra.push_back(pos[i].id);
	}
	while(clock()-cl<0.95*CLOCKS_PER_SEC){
		tmp=rd()%(n-2)+1;
		if(dis(pos[tmp],pos[tmp+1])>dis(pos[tmp],pos[tmp+2])){
			cur-=dis(pos[tmp],pos[tmp+1]);
			cur+=dis(pos[tmp],pos[tmp+2]);
			swap(tra[tmp+1],tra[tmp+2]);
		}
	}
	for(int i=1;i<=n;i++)printf("%d ",tra[i]);
}
2023/3/10 17:51
加载中...