对于第一篇题解的补充
查看原帖
对于第一篇题解的补充
882043
continueOI喵呜ˆωˆ楼主2023/11/4 10:44

加入了随机数的思想:

#include<bits/stdc++.h>
#define double long double
using namespace std;
const int maxn=4e5+10;
struct node{
    int x,y,lx,ly;
}p[maxn];
bool cmp(node A,node B){
    if(A.x<B.x||(A.x==B.x&&A.y<B.y))
        return 1;
    else
        return 0;
}
int dis(node A,node B){
    return (A.lx-B.lx)*(A.lx-B.lx)+(A.ly-B.ly)*(A.ly-B.ly);
}
int n,ans;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	mt19937 Rand(time(0));
    cin>>n;
    int X,Y;
    for(int i=1;i<=n;i++){
        cin>>X>>Y;
        p[i].lx=X;
        p[i].ly=Y;
    }
    for(int i=1;i<=10;i++){
    	double t=(Rand()%99+1.0)/100.0+1.0;
    	for(int i=1;i<=n;i++){
    	    p[i].x=p[i].lx*cos(t)-p[i].ly*sin(t);
    	    p[i].y=p[i].lx*sin(t)+p[i].ly*cos(t);
    	}
    	sort(p+1,p+n+1,cmp);
    	for(int i=1;i<=min(1000,n);i++)
    	    for(int j=n-min(1000,n)+1;j<=n;j++)
    	        ans=max(ans,dis(p[i],p[j]));
	}
    cout<<ans<<'\n';
    return 0;
}

实测可以快很多,而且不容易被卡。

整活

2023/11/4 10:44
加载中...