这都能过!!!(违规紫衫)

P1429 平面最近点对(加强版)

SY_Nightmare @ 2024-10-04 14:18:45

随便乱打的代码,不开02都能过。

#include<bits/stdc++.h>
#define pi acos(-1.0)
using namespace std;
struct node{double x,y;}a[200005];
int n;
double ans=1e15;
bool cmp(node a,node b){return a.x<b.x;}
double dis(node a,node b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=i+5&&j<=n;j++)
            ans=min(ans,dis(a[i],a[j]));
    cout<<fixed<<setprecision(4)<<ans;
    return 0;
}

by SY_Nightmare @ 2024-10-04 14:19:29

提交记录:https://www.luogu.com.cn/record/179908658


by SY_Nightmare @ 2024-10-04 14:21:46

请求加强数据


by Peter_0327 @ 2024-10-04 14:23:07

tql orz


by Texas_the_Omertosa @ 2024-10-04 14:31:48

@SY_Nightmare 看第一篇题解


by 123456ph @ 2024-10-04 14:32:46

我们充分发扬人类智慧:

将所有点全部绕原点旋转同一个角度,然后按
x坐标排序

根据数学直觉,在随机旋转后,答案中的两个点在数组中肯定不会离得太远

所以我们只取每个点向后的5个点来计算答案

这样速度快得飞起,在n=1000000时都可以在1s内卡过

抄题解好玩吗?


by SY_Nightmare @ 2024-10-04 14:33:39

@Texas_the_Omertosa 我并未旋转


by 123456ph @ 2024-10-04 14:33:47

@SY_Nightmare 还有,你这提交记录也看不了


by SY_Nightmare @ 2024-10-04 14:36:03

@123456ph 好了


by SY_Nightmare @ 2024-10-04 14:38:45

还有 这篇题解也无代码 我抄什么???

题解中的随机旋转你看到了吗 代码中旋转了吗???

请在发帖前过一下脑子(雾)


by Texas_the_Omertosa @ 2024-10-04 16:16:42

@SY_Nightmare 我认错


| 下一页