题目:

提示:并没有精度问题。

原题 NOIP2010 导弹拦截

思路

设源点为A(x1, y1)和B(x2, y2)。

第一步,用结构体存节点,包括以下元素:

1.横坐标x

2.纵坐标y

3.节点和A的距离平方len1:len1 = (x-x1) * (x-x1) + (y-y1) * (y-y1)

4.节点和B的距离平方len2:len2 = (x-x2) * (x-x2) + (y-y2) * (y-y2)

其中3和4在输入的时候计算。

第二步,假设所有的点都在源点A的圆圈范围:根据与A点的距离平方len1的大小排序,使用sort,写个cmp。

第三步,从排好序的节点n(nodes[n])开始,遍历至nodes[1],进行以下工作:

(1)假设当前的节点nodes[i]加入源点B的圆圈,逐点维护圆圈B的半径平方的大小(若nodes[i].len2比r大,更新r):r(r初始化为0)。

(2)判断nodes[i]+r与先前的答案ans是否更小,是的话更新ans。

第三步结束之后即得到最优的答案。

代码

  1. //
  2. // main.cpp
  3. // Missile_re
  4. //
  5. // Created by wasdns on 16/11/23.
  6. // Copyright © 2016年 wasdns. All rights reserved.
  7. //
  8. #include <iostream>
  9. #include <cstdio>
  10. #include <cstdlib>
  11. #include <string>
  12. #include <algorithm>
  13. #define maxn 1000000000;
  14. using namespace std;
  15. struct p
  16. {
  17. int x, y;
  18. int len1;
  19. int len2;
  20. };
  21. p nodes[100005];
  22. bool cmp(p p1, p p2)
  23. {
  24. if (p1.len1 != p2.len1) {
  25. return p1.len1 < p2.len1;
  26. }
  27. return false;
  28. }
  29. int _max(int a, int b)
  30. {
  31. if (a > b) {
  32. return a;
  33. }
  34. else return b;
  35. }
  36. int _min(int a, int b)
  37. {
  38. if (a < b) {
  39. return a;
  40. }
  41. else return b;
  42. }
  43. int main()
  44. {
  45. int x1, x2, y1, y2;
  46. cin >> x1 >> y1 >> x2 >> y2;
  47. int n, i;
  48. cin >> n;
  49. for (i = 1; i <= n; i++)
  50. {
  51. cin >> nodes[i].x >> nodes[i].y;
  52. nodes[i].len1 = (nodes[i].x - x1) * (nodes[i].x - x1)
  53. + (nodes[i].y - y1) * (nodes[i].y - y1);
  54. nodes[i].len2 = (nodes[i].x - x2) * (nodes[i].x - x2)
  55. + (nodes[i].y - y2) * (nodes[i].y - y2);
  56. }
  57. sort(nodes+1, nodes+n+1, cmp);
  58. int ans = maxn;
  59. int rlen = 0;
  60. for (i = n; i >= 1; i--)
  61. {
  62. rlen = _max(rlen, nodes[i+1].len2);
  63. ans = _min(ans, rlen + nodes[i].len1);
  64. }
  65. cout << ans << endl;
  66. return 0;
  67. }
  68. /*
  69. 0 0 6 0
  70. 5
  71. -4 -2
  72. -2 3
  73. 4 0
  74. 6 -2
  75. 9 1
  76. */

2016/11/24

DS实验题 Missile的更多相关文章

  1. DS实验题 融合软泥怪-2 Heap实现

    题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...

  2. DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储

    题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...

  3. DS实验题 Dijkstra算法

    参考:Dijkstra算法 数据结构来到了图论这一章节,网络中的路由算法基本都和图论相关.于是在拿到DS的实验题的时候,决定看下久负盛名的Dijkstra算法. Dijkstra的经典应用是开放最短路 ...

  4. DS实验题 sights

    算法与数据结构实验题 6.3 sights ★实验任务 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点, 由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱 ...

  5. DS实验题 order

    算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从 ...

  6. DS实验题 Order 已知父节点和中序遍历求前、后序

    题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...

  7. DS实验题 Inversion

    题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange ...

  8. DS实验题 击鼓传花

    题目: 代码1(数组实现): // // main.cpp // DS-击鼓传花 // // Created by wasdns on 16/11/9. // Copyright © 2016年 wa ...

  9. DS实验题 地鼠安家

    ★实验任务 fd是一个公认的美丽校园.一天,fd来了一群地鼠,编号为1到n,他们希望在这里定居.现在先由第一只地鼠往下打一个单位的距离,并且在那里安家.对于每一个已经安家的地鼠,如果他左下或右下没有邻 ...

随机推荐

  1. shell定时任务

    1.认识Croncron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务:/sbin/se ...

  2. Oracle Undo与脏读解析

    Undo就是用来记录保存事务操作过程中的数据,如果事务发生错误,可以之前的数据进行填补. Undo segment 是保存在表空间上的.Undo 大小是固定的,既然是固定的也就是有限的.如果保存的记录 ...

  3. Xamarin.Android开发实践(十四)

    Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文 ...

  4. (二)WebRTC手记之框架与接口

    转自:http://www.cnblogs.com/fangkm/p/4370492.html 转载请注明出处:http://www.cnblogs.com/fangkm/p/4370492.html ...

  5. AppInventor学习笔记(二)——Hello Purr

    一.设计组件 1.定义: 就是WPF中的控件一个意思,直接调用不需要知道怎么写的,只需要写响应函数即可. 2.Designer: (1)界面如下: (2)分区: ①预览窗口: 用于放置应用中所需的组件 ...

  6. hadoop1.2.1的namenode格式化失败的问题

    最近要开始找工作,就在原来搭建好的hadoop1.2.1的伪分布式跑跑mapreduce 很久没用,就想着格式化一下namode,结果: Format aborted in /uar/local/ha ...

  7. Spotlight on MySQL监控MySQL服务器

    第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connector-3.5x,5.3.2版本我试了下不行,有兴趣可 ...

  8. JAVA项目JDK版本修改

    1.添加JDK    window-----> preferences 2.设置默认JDK版本 3.在项目上右键------>Properties

  9. python 代码片段9

    #coding=utf-8 # 字符串指示符号 r表示raw u表示unicode mystring=u'this is unicode!--by' print mystring # 'raw'表示告 ...

  10. 关于adb驱动

    Android设备(如手机)连接PC时所需要的驱动程序,一般Android设备连接WinXP是无需安装驱动的. adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb ...