题目大意:一个人站在三维坐标系下的原点处用炮打蚊子,给出n个蚊子的起始坐标跟单位时间匀速移动的方向向量,距离他R以内的蚊子都可以打到,不过他也需要休息,没蚊子的时候也可以休息下。求他要起来多少次打蚊子。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = ;
const double eps = 1e-;
const double Pi=acos(-1.0); int n, cnt;
double R; inline bool scan_d(double &ret)
{ //如果数据比较多,而输入的数值比较小就不用scanf而用这种输入方法,用scanf会超时
char c; int sgn;
if(c = getchar(),c == EOF) return ; //EOF
while(c != '-' && (c < '' || c > '')) c = getchar();
sgn = (c == '-') ? - : ;
ret = (c == '-') ? : (c - '');
while(c=getchar(),c>=''&&c<='') ret=ret*+(c-'');
ret *= sgn;
return ;
} struct Point3
{
double x, y, z;
Point3(double x=,double y=,double z=):x(x),y(y),z(z){}
void get() { scan_d(x); scan_d(y); scan_d(z); }
}; struct Node
{
double x, y;
}f[N]; double Dot(Point3 a,Point3 b){return a.x*b.x+a.y*b.y+a.z*b.z;} inline double min(double a,double b){ return a-b>eps?b:a;}
inline double max(double a,double b){ return a-b>eps?a:b;} void Deal(Point3 p, Point3 q)
{
double a=Dot(q,q);
double b=*Dot(p,q);
double c =Dot(p,p)-R*R;
double t =b*b-*a*c;
if (t < eps) return;
else if (fabs(t) < eps)
{
double i = -b / (2.0 * a);
if (i < ) return;
f[cnt].x = f[cnt].y = i;
}
else
{
double i = (-b + sqrt(t) ) / ( * a);
double j = (-b - sqrt(t) ) / ( * a);
if (i < -eps && j < -eps) return;
else if (i < -eps) i = ;
else if (j < -eps) j = ;
f[cnt].x = min(i, j);
f[cnt].y = max(i, j);
}
cnt++;
} void Init()
{
cnt = ;
Point3 p, v;
scanf("%d%lf", &n, &R);
for (int i = ; i < n; i++)
{
p.get();v.get();
Deal(p, v);
}
} bool mycomp(const Node &a, const Node &b)
{
if (fabs(a.y - b.y) > eps) return a.y - b.y < eps;
return a.x - b.x < eps;
} int Solve()
{
int i,ans = ;
double start = -;
for (i = ; i < cnt; i++)
{
if (f[i].x - start > eps)
{
start = f[i].y;
ans++;
}
}
return ans;
} int main ()
{
int i,Icas;
scanf("%d", &Icas);
for (i = ; i <= Icas; i++)
{
Init();
sort(f, f + cnt, mycomp);
printf("Case %d: %d %d\n", i, cnt, Solve());
}
return ;
}

foj 2144 三位几何+区间覆盖的更多相关文章

  1. Java 生成三位随机数

    调用这个Math.Random()函数能够返回带正号的double值,该值取值区间是[0.0,1.0),注意,它是左闭右开区间.返回值是一个伪随机选择的数,在该范围内(近似)均匀分布. 如果生成三位随 ...

  2. NYOJ 12:喷水装置(二)(贪心,区间覆盖问题)

    12-喷水装置(二) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:28 提交数:109 难度:4 题目描述: 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n ...

  3. 贪心问题:区间覆盖 NYOJ 喷水装置(二)

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水 ...

  4. Guess Your Way Out! II---cf 558D (区间覆盖,c++STL map 的使用)

    题目链接:http://codeforces.com/contest/558/problem/D 题意就是有一个二叉树高度为 h ,人站在根节点上,现在要走出去,出口在叶子节点上,有 q 条信息,每条 ...

  5. Mayor's posters 线段树区间覆盖

    题目链接 http://poj.org/problem?id=2528 Description The citizens of Bytetown, AB, could not stand that t ...

  6. nyoj 12——喷水装置二——————【贪心-区间覆盖】

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...

  7. HDU 3397 区间覆盖,颠倒,合并(好题)

    http://acm.hust.edu.cn/vjudge/problem/14689 三个操作 [a,b]覆盖为0 [a,b]覆盖为1 [a,b]颠倒每项 两个查询 [a,b]间1数量 [a,b]间 ...

  8. [NOI2015] 软件包管理器【树链剖分+线段树区间覆盖】

    Online Judge:Luogu-P2146 Label:树链剖分,线段树区间覆盖 题目大意 \(n\)个软件包(编号0~n-1),他们之间的依赖关系用一棵含\(n-1\)条边的树来描述.一共两种 ...

  9. 牛客挑战赛40 VMware和基站 set 二分 启发式合并 区间覆盖

    LINK:VMware和基站 一道 做法并不常见的题目 看起来很难写 其实set维护线段就可以解决了. 容易想到 第二个操作借用启发式合并可以得到一个很不错的复杂度 不过利用线段树维护这个东西 在区间 ...

随机推荐

  1. SC || 那些CheckStyle中的错误们

    lab5里给了我们一个checkstyle查代码风格的方法.. 然后 lab4代码 copy一份! 添加checkstyle! 项目 右键 checkstyle!(自信脸) 3s后——7256 war ...

  2. NPM下载模块包说明

    博主对npm包安装收集了各种资料和实践后对它们之间的差异整理,写下这篇文章避免自己忘记,同时也给node.js猿友一点指引. 我们在使用 npm install 安装模块的模块的时候 ,一般会使用下面 ...

  3. scanf()的使用

    scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. 如下面代码: #include<stdio.h> int main() { int a,b; sca ...

  4. oracle 命中率

    一般在I/O 使用中,为了提高系统处理速度,系统提前将数据读入一块内存区,叫高速缓存,但提前读入的数据未必就是需要的,这就是命中率..计算公式为 命中率=1-(physical reads/(db b ...

  5. 理解JWT的使用场景和优劣

    理解JWT的使用场景和优劣 淘楼小能手 百家号04-2816:20 经过前面两篇文章<JSON Web Token - 在Web应用间安全地传递信息><八幅漫画理解使用JSON We ...

  6. 转 WebService两种发布协议--SOAP和REST的区别

    转发文章 https://blog.csdn.net/zl834205311/article/details/62231545?ABstrategy=codes_snippets_optimize_v ...

  7. unbuntu14下Qt4.8 和MySQL连接问题 QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE

    使用 QSqlDatabase::addDatabase创建数据库时 会报错: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: availab ...

  8. MongoDB之Replica Sets环境搭建

    最近学习MongoDB,这两天在搭建复制集的时候碰到了不少问题,也踩了好多坑,现在在这里记录下来,以供自己和他人参考 (因为本人是初学者,所以遇到的问题也会比较初级,所以本文也比较适合初学者查阅) 背 ...

  9. Linux学习-逻辑滚动条管理员 (Logical Volume Manager)

    LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实 体 partition 到这个 LVM 管理的磁盘 ...

  10. 使用 Button 类在 XNA 中创建图形按钮(九)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...