zoukankan      html  css  js  c++  java
  • 洛谷 P1158 导弹拦截(不是那个DP) 解题报告

    P1158 导弹拦截

    题目描述

    经过1111年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。当工作半径为0时,则能够拦截与它位置恰好相同的导弹。但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径。而当天的使用代价,就是所有系统工作半径的平方和。

    某天,雷达捕捉到敌国的导弹来袭。由于该系统尚处于试验阶段,所以只有两套系统投入工作。如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价。

    输入输出格式

    输入格式:

    第一行包含 4 4 个整数(x_1,y_1,x_2,y_2) ,每两个整数之间用一个空格隔开,表示这两套导弹拦截系统的坐标分别为((x_1, y_1))((x_2, y_2))。 第二行包含1个整数(N),表示有 (N)颗导弹。接下来(N)行,每行两个整数(x,y),中间用 一个空格隔开,表示一颗导弹的坐标((x, y))。不同导弹的坐标可能相同。

    输出格式:

    一个整数,即当天的最小使用代价。

    【数据范围】

    对于 10% 的数据, (N=1)

    对于 20% 的数据, (1≤N≤2)

    对于 40% 的数据, (1≤N≤100)

    对于 70% 的数据, (1≤ N≤1000)

    对于 100% 的数据,(1 ≤ N ≤ 100000),且所有坐标分量的绝对值都不超过1000。


    事实证明,并不是多做了几个省选模板的数据结构就可以让我变得强一些。这个题我想+A大概花了有一个小时左右。虽说可以说是第一次看见这样类似的题,但想这么长时间还是挺打击自信心的。

    首先可能因为今晚做的一道贪心题,我先入为主胡乱打了一波贪心,还没交就被我hack掉了,但我想看看能骗多少分,还是交了上去,恩40海星了。

    以为是贪心不完善,结果想了好久没办法。。

    辗转画图中,我发现可以先处理一个点对所有的点的距离,然后枚举这些距离并算出另一个点要开的大小。首先排序保证单调,然后预处理另一个点。

    我觉得可以理解为,通过排序使一个维度单调,然后暴力枚举令一个维度更新答案。


    code:

    #include <cstdio>
    #include <algorithm>
    int max(int x,int y){return x>y?x:y;}
    int min(int x,int y){return x<y?x:y;}
    const int N=100010;
    const int inf=0x3f3f3f3f;
    int x1,x2,y1,y2,mi1,mi2,mx[N];
    struct node
    {
        int d1,d2;
        friend bool operator <(node n1,node n2)
        {
            return n1.d1<n2.d1;
        }
    }d[N];
    int get(int xk,int yk,int xl,int yl)
    {
        return (xk-xl)*(xk-xl)+(yk-yl)*(yk-yl);
    }
    int main()
    {
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        int x,y,n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&x,&y);
            d[i].d1=get(x1,y1,x,y);
            d[i].d2=get(x2,y2,x,y);
        }
        std::sort(d+1,d+1+n);
        for(int i=n;i>=0;i--)
            mx[i]=max(mx[i+1],d[i].d2);
        int ans=inf;
        for(int i=0;i<=n;i++)
            ans=min(ans,mx[i+1]+d[i].d1);
        printf("%d
    ",ans);
        return 0;
    }
    
    

    2018.6.15

  • 相关阅读:
    requests使用text可以查看源码
    正则表达式之search、sub
    【JS】深拷贝与浅拷贝的区别,实现深拷贝的几种方法
    php:对象(object)数据类型实例详解
    usage: git remote add [<options>] <name> <url> -f, --fetch fetch the remote branches --tags import all tags and associated objects when fetching
    PHP 可选参数
    php中文乱码问题的终极解决方案汇总
    html表单提交给PHP然后浏览器显示出了PHP的源代码
    wamp 安装
    wamp选择语言
  • 原文地址:https://www.cnblogs.com/butterflydew/p/9189398.html
Copyright © 2011-2022 走看看