zoukankan      html  css  js  c++  java
  • 洛谷P1158 导弹拦截 排序

    ---恢复内容开始---

    洛谷P1158 导弹拦截
    排序 算是有技巧的枚举吧

    题意 用两套系统来拦截导弹,一个系统的费用等于这个系统拦截的导弹中离他最远的那颗导弹
    和系统的距离 的平方

    排序 将每颗导弹按距离系统1 的距离排序,
    然后枚举n--0 选这些导弹为系统1最远能够拦截的导弹
    然后就可以更新下一次 系统2要拦截的导弹 中离系统2 最远的一颗

     1 #include <cstdio>
     2 #include <cmath>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <string>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <iostream>
     9 using namespace std ;
    10 
    11 const int maxn = 100011,inf = 1e9 ; 
    12 struct node{
    13     int x,y,r1,r2 ;  
    14 };
    15 int n,xs,ys,xt,yt,r1,r2,ans ; 
    16 node a[maxn] ; 
    17 
    18 inline bool cmp(node a,node b) 
    19 {
    20     return a.r1 < b.r1 ; 
    21 }
    22 
    23 inline int sqr(int x) 
    24 {
    25     return x*x ; 
    26 }
    27 
    28 int main() 
    29 {
    30     scanf("%d%d%d%d",&xs,&ys,&xt,&yt) ; 
    31     scanf("%d",&n) ;
    32     for(int i=1;i<=n;i++) 
    33     {
    34         scanf("%d%d",&a[ i ].x,&a[ i ].y) ;  
    35         a[ i ].r1 = sqr(a[ i ].x-xs) + sqr(a[ i ].y-ys) ; 
    36         a[ i ].r2 = sqr(a[ i ].x-xt) + sqr(a[ i ].y-yt) ; 
    37     }
    38     sort(a+1,a+n+1,cmp) ; 
    39     r2 = 0 ;
    40     ans = inf ; 
    41     for(int i=n;i>=0;i--) 
    42     {
    43         if( a[ i ].r1 + r2 < ans ) ans = a[ i ].r1 + r2 ;   //  r2  为系统2的费用  
    44         if( a[ i ].r2 > r2 ) r2 = a[ i ].r2 ;   
    45         //  更新 下一次系统2 要拦截的 导弹中距离 系统最远的那一颗 
    46     }
    47     printf("%d
    ",ans) ; 
    48     return 0 ; 
    49 }

    ---恢复内容结束---

  • 相关阅读:
    python 生成器 迭代器
    廖---高级特性 切片 迭代 列表生成式
    汉诺塔
    廖---函数
    廖---控制流
    廖---list tuple dic set
    廖---字符串和编码
    MySQL常见的三种存储引擎
    mysql悲观锁以及乐观锁总结和实践
    数据库事务的四大特性以及事务的隔离级别
  • 原文地址:https://www.cnblogs.com/third2333/p/6914993.html
Copyright © 2011-2022 走看看