2490 导弹防御塔

2490 导弹防御塔

时间限制: 1 s
空间限制: 64000 KB
题目等级 : 大师 Master
 
 
 
 
题目描述 Description

  Freda的城堡——
  “Freda,城堡外发现了一些入侵者!”
  “喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”
  “可是入侵者已经接近城堡了呀!”
  “别担心,rainbow,你看呢,这是我刚设计的导弹防御系统的说~”
  “喂...别卖萌啊……”

  Freda控制着N座可以发射导弹的防御塔。每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚。在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导弹的防御塔需要T2分钟来冷却。
  所有导弹都有相同的匀速飞行速度V,并且会沿着距离最短的路径去打击目标。计算防御塔到目标的距离Distance时,你只需要计算水平距离,而忽略导弹飞行的高度。导弹在空中飞行的时间就是 (Distance/V) 分钟,导弹到达目标后可以立即将它击毁。
  现在,给出N座导弹防御塔的坐标,M个入侵者的坐标,T1、T2和V,你需要求出至少要多少分钟才能击退所有的入侵者。

输入描述
Input Description

  第一行五个正整数N,M,T1,T2,V。
  接下来M行每行两个整数,代表入侵者的坐标。
  接下来N行每行两个整数,代表防御塔的坐标。

输出描述
Output Description

  输出一个实数,表示最少需要多少分钟才能击中所有的入侵者,四舍五入保留六位小数。

样例输入
Sample Input

3 3 30 20 1
0 0
0 50
50 0
50 50
0 1000
1000 0

样例输出
Sample Output

91.500000

数据范围及提示
Data Size & Hint

  对于40%的数据,N,M<=20.
  对于100%的数据, 1≤N≤50, 1≤M≤50,坐标绝对值不超过10000,T1,T2,V不超过2000.

来源:Nescafe 19

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
【题解】
二分答案,让每个炮台发射尽量多的导弹,即把一个炮台拆成很多个点,
看每个点能不能打到某个入侵者,打到就往入侵者连边
注意二分上界
 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define abs(a) ((a) < 0 ? (-1 * (a)) : (a)) const int INF = 0x3f3f3f3f;
const double eps = 0.0000001;
const int MAXN = + ; inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-') x = -x;
} int n,m,t1,t2;
double v;
int tax[MAXN],tay[MAXN],qinx[MAXN],qiny[MAXN];
int g[][MAXN], lk[MAXN], b[MAXN];
int tot; inline double dis(int a, int b)
{
return sqrt(abs(tax[a] - qinx[b]) * abs(tax[a] - qinx[b]) + abs(tay[a] - qiny[b]) * abs(tay[a] - qiny[b]));
} //-1:> 0:= 1:<
int cmp(double a, double b)
{
if(abs(a - b) <= eps)return ;
return a - b < ? : -;
} int dfs(int u)
{
for(register int i = ;i <= m;++ i)
{
if(!b[i] && g[u][i])
{
b[i] = ;
if(lk[i] == - || dfs(lk[i]))
{
lk[i] = u;
return ;
}
}
}
return ;
} int xiongyali()
{
int ans = ;
memset(lk, -, sizeof(lk));
for(register int i = ;i <= tot;++ i)
{
memset(b, , sizeof(b));
ans += dfs(i);
}
return ans;
} int check(double ma)
{
memset(g, , sizeof(g));
tot = ;
//枚举炮台
for(register int i = ;i <= n;++i)
{
//发射时间
for(register double now = t1;cmp(now, ma) != -;now += t2 + t1)
{
++ tot;
//看能到达的入侵者
for(register int j = ;j <= m;++ j)
{
if(cmp(now + dis(i,j) / v, ma) != -)
g[tot][j] = ;
}
}
}
if(xiongyali() == m) return ;
return ;
} int main()
{
scanf("%d %d %d %d %lf", &n, &m, &t1, &t2, &v);
t2 *= ;v = v/;
for(register int i = ;i <= m;++ i)
scanf("%d %d", &qinx[i], &qiny[i]);
for(register int j = ;j <= n;++ j)
scanf("%d %d", &tax[j], &tay[j]);
double l = , r = , mid, ans = ;
while(cmp(l + eps, r) == )
{
mid = (l + r) / ;
if(check(mid))r = mid, ans = mid;
else l = mid;
}
printf("%.6f", ans/);
return ;
}

Codevss2490

 
 
 

Codevs2490 导弹防御塔的更多相关文章

  1. bzoj3035: 导弹防御塔

    Description Freda的城堡——“Freda,城堡外发现了一些入侵者!”“喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”“可是入侵者已经接近城堡了呀!”“别担心,rain ...

  2. 「Poetize3」导弹防御塔

    描述 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导 ...

  3. [tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)

    传送门 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚 ...

  4. CH6803 导弹防御塔

    6803 导弹防御塔 0x60「图论」例题 背景 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛l ...

  5. 【NOIP2013模拟】导弹防御塔

    题目 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~" "可是入侵者 ...

  6. contest hunter 6803 导弹防御塔

    没什么好写的.写写这题吧 拆点,把一个防御塔拆成m个,表示第i次攻击.瞎yy就好啊 #include<cstdio> #include<iostream> #include&l ...

  7. 【CH6803】导弹防御塔

    题目大意:给定 N 座塔,M 个怪物,每座塔一次可以发射一枚导弹,发射导弹有发射时间和冷却时间,每座塔和每只怪物有自己的二维坐标,所有导弹有一个共同的速度,求至少需要多长时间才能将所有怪物消灭. 题解 ...

  8. JoyOI1935 导弹防御塔

    原题链接 首先可以二分答案,然后考虑检验答案. 我们可以对炮塔进行拆点,即能发射\(x\)颗导弹就拆成\(n\times x\)个点,作为一个集合,另一个集合则是\(m\)个侵入者,然后对于能在剩余时 ...

  9. joyoi1935 「Poetize3」导弹防御塔

    #include <iostream> #include <cstring> #include <cstdio> #include <queue> #i ...

随机推荐

  1. .git文件夹太大问题及解决方法

    最近我们做了自动化构建, 发现文件.git文件夹越来越大, 求后端小伙伴帮忙, 小伙伴指点了一下说周末弄了一下, 忘记命令的.大致的意思就是找到git 提交了哪些大文件. 然后重构git, 先分享给小 ...

  2. mysql插入数据显示:Incorrect datetime value: '0000-00-00 00:00:00'

    1. 在进行mysql数据插入的时候,由于mysql的版本为5.7.1,部分功能已经升级,导致在datetime数据类型的影响下出现错误:   数据插入: mysql>insert into j ...

  3. Consul 安装的与启动

    1.下载地址:https://www.consul.io/downloads.html linux 下载地址: wget https://releases.hashicorp.com/consul/0 ...

  4. Java-Druid:目录

    ylbtech-Java-Druid:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://yl ...

  5. FormData兼容IE10 360及DWR的异步上传原理

    摘自:https://github.com/henryluki/FormData/blob/master/formdata.js if(!window.FormData) { (function(se ...

  6. python-爬免费ip并验证其可行性

    前言 最近在重新温习python基础-正则,感觉正则很强大,不过有点枯燥,想着,就去应用正则,找点有趣的事玩玩 00xx01---代理IP 有好多免费的ip,不过一个一个保存太难了,也不可能,还是用我 ...

  7. SpringIOC注入模块中xml文件导入其他xml文件配置

    如果我们在spring框架中配置了多个xml文件,我们可以在读取配置文件的时候把这些xml文件一下全都读取 也可以只读一个总的xml文件,在这个总的xml文件中把其他的xml全都都导入进来. 例如: ...

  8. 【bzoj 4671】 异或图

    题目 神仙题啊神仙题 显然这个东西一脸不可求的样子啊,这种东西我们显然需要搞一个容斥什么的 于是设\(g_i\)表示至少存在\(i\)个联通块(联通块内部的边没有要求,联通块和联通块之间不存在边)的方 ...

  9. 11-4-while和dowhile

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. MFC ,List使用

    出自http://www.cnblogs.com/yuehui/archive/2012/06/15/2550449.html List容器双向线性表list容器   list类定义了双向的线性表.V ...