题目大意:给定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的更多相关文章

  1. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  2. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  3. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  4. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  5. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  6. 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 ...

  7. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  8. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  9. 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 ...

随机推荐

  1. 安卓app测试之内存分析

    一.内存分析步骤 1.启动App. 2.使用monitor命令打开:ADM(包含DDMS) ->update heap 3.操作app,点几次GC 4.dump heap 5.hprof-con ...

  2. 并发编程学习笔记(8)----ThreadLocal的使用及源码分析

    1. ThreadLocal的理解 ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境 ...

  3. Jquery 上一步、下一步及提交

    111 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <tit ...

  4. JAVA基础——文件File简单实用

    1.1java.io.File File用于表示文件系统中的一个文件或目录 通过File可以: 1:访问该文件或目录的属性信息(名字,大小,修改时间等) file.getName();获取文件名fil ...

  5. 再读Android sqlite

    再读Android sqlite Android原生支持sqlite数据库操作,sqlite时轻量级关系型数据库,支持标准sql语句.Android对sqlite进行良好的接口封装来避免sql注入等安 ...

  6. Maven 项目debug调试时报Source not found.异常

    正如异常描述,那么解决方法当然是指定源码. 测试于:Maven 3.0.5, eclipse-jee-indigo-SR2-win32 异常信息: Source not found. 解决方法: 首先 ...

  7. ExtJs如何判断form表单是否被修改过详解

    1.Extjs表单提交主要有三种方式: 1, EXT的form表单ajax提交(默认提交方式)      相对单独的ajax提交来说优点在于能省略写参数数组 ,form.getForm().submi ...

  8. Python&机器学习总结(一)

    ① numpy中np.c_和np.r_ np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat(). np.c_是按行连接两个矩阵,就是把两矩阵左右相加, ...

  9. UVA-127 "Accordian" Patience(模拟)

    题目: 把52张牌从左到右排好,每张牌自成一个牌堆.当某张牌与它左边那张牌或者左边第三张牌匹配时(花色或者点数相同)时,就把这张牌移到那张牌上面. 移动之后还要查看是否可以进行其他移动.只有位于牌堆顶 ...

  10. rsync+sersync自动同步备份数据

    一.为什么要用Rsync+sersync架构?1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修 ...