比赛 20231212_2010联赛题复现 评测结果 AAAAAAAAAA
题目名称 导弹拦截 最终得分 100
用户昵称 小金 运行时间 0.293 s
代码语言 C++ 内存使用 2.75 MiB
提交时间 2023-12-12 21:51:10
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct dd1{
    int h1;
    int x,y,s1,s2;
}a1[100010];
struct dd2{
    int h2;
    int s2;
}a2[100010];
int lx1,lx2,ly1,ly2;      
int n,s,ys1[100010],ys2[100010];
long long ans;
bool cmp1(dd1 dx,dd1 dy)
{
    return dx.s1<dy.s1;
}
bool cmp2(dd2 dx,dd2 dy)
{
    return dx.s2<dy.s2;
}  
int main()
{
    freopen("missile2.in","r",stdin);
    freopen("missile2.out","w",stdout);
    cin>>lx1>>ly1>>lx2>>ly2;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a1[i].x>>a1[i].y;
        a1[i].h1=i;
        a2[i].h2=i;
        a1[i].s1=abs(a1[i].x-lx1)*abs(a1[i].x-lx1)+abs(a1[i].y-ly1)*abs(a1[i].y-ly1);
        a2[i].s2=abs(a1[i].x-lx2)*abs(a1[i].x-lx2)+abs(a1[i].y-ly2)*abs(a1[i].y-ly2);
    }
    sort(a1+1,a1+n+1,cmp1);
    sort(a2+1,a2+n+1,cmp2);
    ans=(long long)a1[n].s1;
    for(int i=1;i<=n;i++)
    {
        ys1[a1[i].h1]=i;
    }
    for(int i=1;i<=n;i++)
    {
        ys2[a2[i].h2]=i;
    }
    int ma=0;
    for(int i=n;i>=1;i--)
    {
        if(ys2[a1[i].h1]>ma)
        {
            ma=ys2[a1[i].h1];
        }
        long long s=(long long)a1[i-1].s1+a2[ma].s2;
        if(s<ans)
        {
            ans=s;
        }
    }
    cout<<ans;
}