poj138——建立雷达,贪心,求线段交集
时间:2020-11-21
本文章向大家介绍poj138——建立雷达,贪心,求线段交集,主要包括poj138——建立雷达,贪心,求线段交集使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本题的一个重要转化是:将每小岛的位置转换成一个线段,然后求能够使得每个线段上都有一个点的情况下,需要的点的最小个数。因为有重叠部分的线段只需要一个点就可以,所以重点在于求线段的交集。
对于一组线段组成的集合,当且仅当 这个集合中最大的左端点小于最小的右端点的时候,这一组线段集合才会都重叠。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int MAX = 1010;
int n, d;
int tot = 1;
struct Node{
double left;
double right;
};
Node a[MAX];
bool cmp(const Node& a, const Node& b)
{
return a.left < b.left;
}
void solve()
{
// 按左端点从小到大排序
sort(a, a+n, cmp);
// 遍历
int ans = 1;
double now_right = a[0].right;
for (int i = 1; i < n; ++i) {
//所有线段的交集就是最大的左端点小于最小的右端点
// 如果现在的左端点小于等于现存集合中线段的最小右端点,说明这个集合可以加入这个线段
if (a[i].left <= now_right) {
now_right = min(now_right, a[i].right);
}
// 如果现在的集合不能加入这个线段,那么就新开一个集合,其最小右端点就是该线段的右端点
else {
ans++;
now_right = a[i].right;
}
}
cout << "Case " << tot << ": " << ans << endl;
tot++;
}
int main()
{
while(cin >> n >> d) {
bool flag = true;
if (n == 0 && d == 0) break;
for (int i = 0; i < n; ++i) {
int x, y;
cin >> x >> y;
// 如果坐标y大于d,那么无解
if (y > d) {
flag = false;
}
// 计算能够覆盖该点的圆心所在的线段
a[i].left = (double)x - sqrt((double)d*d - (double)y*y);
a[i].right = (double)x + sqrt((double)d*d - (double)y*y);
}
// 有解的话就solve
if (flag) solve();
// 无解就直接print -1
else {
cout << "Case "<< tot << ": "<< -1 << endl;
tot++;
}
}
return 0;
}
原文地址:https://www.cnblogs.com/VanHa0101/p/14017646.html
- SNV突变(96种)频谱的制作
- Golang语言社区--go语言执行cmd命令关机、重启等
- 【直播】我的基因组 45:SNV突变(6种)频谱的制作
- 【直播】我的基因组 44:比对文件画profile和heatmap图
- 做过1000遍RNA-seq的老司机告诉你如何翻车
- 【直播】我的基因组 43:简单粗糙的WGS数据分析流程
- 用谷歌搜索来使用ggplot2做可视化(下)
- 如何通过Google来使用ggplot2可视化
- 【直播】我的基因组54:把我的variation跟dbSNP数据库相比较
- 【翻译】MongoDB指南/引言
- TensorFlow从0到1 | 第十二章:TensorFlow构建3层NN玩转MNIST
- 如何通过预加载器提升网页加载速度
- 分钟学会正则表达式(译)
- TensorFlow从0到1 | 第十一章 74行Python实现手写体数字识别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法