UVA - 10691 Subway
题目大意:给定n个点。要求建造尽量少得铁路(从原点发射出的射线)。使得全部点到铁路的最短距离小于d。
解题思路:题目能够转化成区间选点问题,即以极角来表示铁轨。然后计算出每一个区间可行的极角范围,进行区间选点。
注意:(1)假设点到原点的距离dis<=d的话。不进行考虑,也无法推断。由于没有说直角边大于等于斜边的。
(2)区间有可能在二三象限时重叠,我的处理方法是每次枚举起始点,进行n次选点问题。
(3)由于每次都将区间i的左右区间+2pi后放到最后。忘记考虑s[i].r+2pi 有可能小于 s[m-1].r的情况,所以一直WA。
处理。在初始化区间时,将右区间大于pi的统一左右区间减掉2pi。
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
double pi = acos(-1);
int cnt;
struct Point {
double l, r;
bool operator < (Point a) const {
return r < a.r;
}
} A[500];
double cal(double x, double y) {
return sqrt(x*x + y*y);
}
int solve() {
sort(A, A + cnt);
for (int i = 0; i < cnt; i++) {
A[i + cnt].l = A[i].l + 2 * pi;
A[i + cnt].r = A[i].r + 2 * pi;
}
int ans = cnt;
for (int i = 0; i < cnt; i++) {
double val = A[i].r;
int tmp = 1;
for (int j = i + 1; j < cnt + i; j++) if (A[j].l > val + 1e-9) {
val = A[j].r;
tmp++;
}
ans = min(ans, tmp);
}
return ans;
}
int main() {
int N;
scanf("%d", &N);
while (N--) {
int n;
double d, x, y;
scanf("%d%lf", &n, &d);
cnt = 0;
for (int i = 0; i < n; i++) {
scanf("%lf%lf", &x, &y);
if (cal(x, y) <= d) continue;
double angle = atan2(y, x);
double range = asin(d / cal(x, y));
A[cnt].l = angle - range;
A[cnt++].r = angle + range;
if (A[cnt-1].r <= pi) continue;
A[cnt-1].r -= 2 * pi;
A[cnt-1].l -= 2 * pi;
}
printf("%d\n", solve());
}
return 0;
}
UVA - 10691 Subway的更多相关文章
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
- UVA - 1625 Color Length[序列DP 代价计算技巧]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- UVA - 11584 Partitioning by Palindromes[序列DP]
UVA - 11584 Partitioning by Palindromes We say a sequence of char- acters is a palindrome if it is t ...
随机推荐
- TCP/IP和UDP的比较
TCP.UDP详解 1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态.因此有必要增强网络层提供服务的服务质量. 2.引入传输层的原因 面向 ...
- [oracle]表空间情况查看、占用、扩容、使用情况、空间维护等操作
--查询表空间使用情况SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB ...
- Learning Face Age Progression: A Pyramid Architecture of GANs
前言 作为IP模式识别的CNN初始模型是作为单纯判别式-模式识别存在的,并以此为基本模型扩展到各个方向.基本功能为图像判别模型,此后基于Loc+CNN的检测模型-分离式.end2end.以及MaskC ...
- Jmeter之JDBC请求参数化(一)
一.环境准备 a.jmeter5.1.1版本最新版本,可以去网页下载:https://jmeter.apache.org/download_jmeter.cgi b.jdbc驱动:链接:https:/ ...
- 梦想CAD控件COM接口光栅图处理
在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪.透明度调整等一些操作,在网页可以快速实现我们所需功能. 一 ...
- 解决vue项目运行过程中,npm run dev 报错问题
[方案1] 错误如下: npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! travel@1.0.0 dev: `webpack-dev-server ...
- extjs动态插入一列
StdDayWordQuery:function(btn,event){ var form=Ext.getCmp('queryFormSDW'); var userNameORuserCode = f ...
- Authors and instutes in MCT
Authors and instutes in MCT Table of Contents 1. Authors and Institutes 1.1. Industry 1 Authors and ...
- Java控制台读写
Java控制台读写 控制台读 Java中进行控制台读操作主要是通过Scanner,BufferReader,Console类进行 1. Scanner Scanner对象定义 在控制台 Scanner ...
- 调试pcb板子的步骤
在从外边焊回来的板子中查找问题的时候,如果只是简单的 一通乱调,很有可能一下子就调好了,但是大多数的时候是调了半天,不知道接下来该如何进行,因此,严格的按照步骤走,是个不错的想法: 1.拿到板子的第一 ...