题目大意:一个人站在三维坐标系下的原点处用炮打蚊子,给出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. 《毛毛虫组》【Alpha】Scrum meeting 5

    第二天 日期:2019/6/18 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: 出入库货物年统计模块设计及系统的测试运行: (1)对数据库表--tb_InStore和tb_OutSto ...

  2. Python——三目运算符

    一.三目运算符 1.if语句三目运算符语法格式 Python可以通过if'语句来实现三目运算符的功能,因此可以把这种if语句当做三目运算符,具体语法格式如下: 返回True执行 if 表达式 else ...

  3. java基础—多态(动态加载)

    一.面向对象最核心的机制——动态绑定,也叫多态

  4. java基础—基础语法2

    一.语句

  5. shell脚本,awk取中间列的方法。

    解释 1.$(int(NF/2)+1) 中int(NF/2)等于3,然后加1,就得到中间的4了. 2.$(NF/2+0.5) 相当于得出的是整数.NF/2是3.5,再由3.5+0.5,所以就是4了,也 ...

  6. c#—OpenFileDialog

    OpenFileDialog是什么? OpenFileDialog是一个类,实例化此类可以设置弹出一个文件对话框.比如:我们发邮件时需要上传附件的时候,就会弹出一个让我们选择文件的对话框, 我们可以根 ...

  7. MySql常用数据操作

    1.数据库操作: MySQL服务管理命令: 1.启动服务:sudo service mysql start 2.停止服务:sudo service mysql stop 3.重新启动服务:sudo s ...

  8. Ubuntu 18.04 下用命令行安装Sublime

    介绍: 添加来源: $ wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - $ sud ...

  9. spdlog&rapidjson 使用记录

    项目中需要记录log以及读写json,对比后选择了spdlog以及rapidjson. SPDLog 对于log只是要求能够记录到文件中以及能够过滤,选择spdlog是因为这个只需要包含头文件即可使用 ...

  10. Python——format汇总

    一.str.format 按照指定格式格式化字符串,然后返回格式化的字符串,源字符串不变. 以下是Python2.7环境. 1.1.按照位置替换 参考下面例子: >>> s = '{ ...