DS实验题 Missile
题目:
提示:并没有精度问题。
原题 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。
第三步结束之后即得到最优的答案。
代码
//
// main.cpp
// Missile_re
//
// Created by wasdns on 16/11/23.
// Copyright © 2016年 wasdns. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <algorithm>
#define maxn 1000000000;
using namespace std;
struct p
{
int x, y;
int len1;
int len2;
};
p nodes[100005];
bool cmp(p p1, p p2)
{
if (p1.len1 != p2.len1) {
return p1.len1 < p2.len1;
}
return false;
}
int _max(int a, int b)
{
if (a > b) {
return a;
}
else return b;
}
int _min(int a, int b)
{
if (a < b) {
return a;
}
else return b;
}
int main()
{
int x1, x2, y1, y2;
cin >> x1 >> y1 >> x2 >> y2;
int n, i;
cin >> n;
for (i = 1; i <= n; i++)
{
cin >> nodes[i].x >> nodes[i].y;
nodes[i].len1 = (nodes[i].x - x1) * (nodes[i].x - x1)
+ (nodes[i].y - y1) * (nodes[i].y - y1);
nodes[i].len2 = (nodes[i].x - x2) * (nodes[i].x - x2)
+ (nodes[i].y - y2) * (nodes[i].y - y2);
}
sort(nodes+1, nodes+n+1, cmp);
int ans = maxn;
int rlen = 0;
for (i = n; i >= 1; i--)
{
rlen = _max(rlen, nodes[i+1].len2);
ans = _min(ans, rlen + nodes[i].len1);
}
cout << ans << endl;
return 0;
}
/*
0 0 6 0
5
-4 -2
-2 3
4 0
6 -2
9 1
*/
2016/11/24
DS实验题 Missile的更多相关文章
- DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
- DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储
题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...
- DS实验题 Dijkstra算法
参考:Dijkstra算法 数据结构来到了图论这一章节,网络中的路由算法基本都和图论相关.于是在拿到DS的实验题的时候,决定看下久负盛名的Dijkstra算法. Dijkstra的经典应用是开放最短路 ...
- DS实验题 sights
算法与数据结构实验题 6.3 sights ★实验任务 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点, 由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱 ...
- DS实验题 order
算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从 ...
- DS实验题 Order 已知父节点和中序遍历求前、后序
题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...
- DS实验题 Inversion
题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange ...
- DS实验题 击鼓传花
题目: 代码1(数组实现): // // main.cpp // DS-击鼓传花 // // Created by wasdns on 16/11/9. // Copyright © 2016年 wa ...
- DS实验题 地鼠安家
★实验任务 fd是一个公认的美丽校园.一天,fd来了一群地鼠,编号为1到n,他们希望在这里定居.现在先由第一只地鼠往下打一个单位的距离,并且在那里安家.对于每一个已经安家的地鼠,如果他左下或右下没有邻 ...
随机推荐
- shell定时任务
1.认识Croncron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务:/sbin/se ...
- Oracle Undo与脏读解析
Undo就是用来记录保存事务操作过程中的数据,如果事务发生错误,可以之前的数据进行填补. Undo segment 是保存在表空间上的.Undo 大小是固定的,既然是固定的也就是有限的.如果保存的记录 ...
- Xamarin.Android开发实践(十四)
Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文 ...
- (二)WebRTC手记之框架与接口
转自:http://www.cnblogs.com/fangkm/p/4370492.html 转载请注明出处:http://www.cnblogs.com/fangkm/p/4370492.html ...
- AppInventor学习笔记(二)——Hello Purr
一.设计组件 1.定义: 就是WPF中的控件一个意思,直接调用不需要知道怎么写的,只需要写响应函数即可. 2.Designer: (1)界面如下: (2)分区: ①预览窗口: 用于放置应用中所需的组件 ...
- hadoop1.2.1的namenode格式化失败的问题
最近要开始找工作,就在原来搭建好的hadoop1.2.1的伪分布式跑跑mapreduce 很久没用,就想着格式化一下namode,结果: Format aborted in /uar/local/ha ...
- Spotlight on MySQL监控MySQL服务器
第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connector-3.5x,5.3.2版本我试了下不行,有兴趣可 ...
- JAVA项目JDK版本修改
1.添加JDK window-----> preferences 2.设置默认JDK版本 3.在项目上右键------>Properties
- python 代码片段9
#coding=utf-8 # 字符串指示符号 r表示raw u表示unicode mystring=u'this is unicode!--by' print mystring # 'raw'表示告 ...
- 关于adb驱动
Android设备(如手机)连接PC时所需要的驱动程序,一般Android设备连接WinXP是无需安装驱动的. adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb ...