Codevs2490 导弹防御塔
2490 导弹防御塔
2490 导弹防御塔
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 导弹防御塔的更多相关文章
- bzoj3035: 导弹防御塔
Description Freda的城堡——“Freda,城堡外发现了一些入侵者!”“喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”“可是入侵者已经接近城堡了呀!”“别担心,rain ...
- 「Poetize3」导弹防御塔
描述 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导 ...
- [tyvj1935 Poetize3]导弹防御塔 (二分图多重匹配)
传送门 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚 ...
- CH6803 导弹防御塔
6803 导弹防御塔 0x60「图论」例题 背景 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛l ...
- 【NOIP2013模拟】导弹防御塔
题目 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~" "可是入侵者 ...
- contest hunter 6803 导弹防御塔
没什么好写的.写写这题吧 拆点,把一个防御塔拆成m个,表示第i次攻击.瞎yy就好啊 #include<cstdio> #include<iostream> #include&l ...
- 【CH6803】导弹防御塔
题目大意:给定 N 座塔,M 个怪物,每座塔一次可以发射一枚导弹,发射导弹有发射时间和冷却时间,每座塔和每只怪物有自己的二维坐标,所有导弹有一个共同的速度,求至少需要多长时间才能将所有怪物消灭. 题解 ...
- JoyOI1935 导弹防御塔
原题链接 首先可以二分答案,然后考虑检验答案. 我们可以对炮塔进行拆点,即能发射\(x\)颗导弹就拆成\(n\times x\)个点,作为一个集合,另一个集合则是\(m\)个侵入者,然后对于能在剩余时 ...
- joyoi1935 「Poetize3」导弹防御塔
#include <iostream> #include <cstring> #include <cstdio> #include <queue> #i ...
随机推荐
- .git文件夹太大问题及解决方法
最近我们做了自动化构建, 发现文件.git文件夹越来越大, 求后端小伙伴帮忙, 小伙伴指点了一下说周末弄了一下, 忘记命令的.大致的意思就是找到git 提交了哪些大文件. 然后重构git, 先分享给小 ...
- mysql插入数据显示:Incorrect datetime value: '0000-00-00 00:00:00'
1. 在进行mysql数据插入的时候,由于mysql的版本为5.7.1,部分功能已经升级,导致在datetime数据类型的影响下出现错误: 数据插入: mysql>insert into j ...
- Consul 安装的与启动
1.下载地址:https://www.consul.io/downloads.html linux 下载地址: wget https://releases.hashicorp.com/consul/0 ...
- Java-Druid:目录
ylbtech-Java-Druid:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://yl ...
- FormData兼容IE10 360及DWR的异步上传原理
摘自:https://github.com/henryluki/FormData/blob/master/formdata.js if(!window.FormData) { (function(se ...
- python-爬免费ip并验证其可行性
前言 最近在重新温习python基础-正则,感觉正则很强大,不过有点枯燥,想着,就去应用正则,找点有趣的事玩玩 00xx01---代理IP 有好多免费的ip,不过一个一个保存太难了,也不可能,还是用我 ...
- SpringIOC注入模块中xml文件导入其他xml文件配置
如果我们在spring框架中配置了多个xml文件,我们可以在读取配置文件的时候把这些xml文件一下全都读取 也可以只读一个总的xml文件,在这个总的xml文件中把其他的xml全都都导入进来. 例如: ...
- 【bzoj 4671】 异或图
题目 神仙题啊神仙题 显然这个东西一脸不可求的样子啊,这种东西我们显然需要搞一个容斥什么的 于是设\(g_i\)表示至少存在\(i\)个联通块(联通块内部的边没有要求,联通块和联通块之间不存在边)的方 ...
- 11-4-while和dowhile
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MFC ,List使用
出自http://www.cnblogs.com/yuehui/archive/2012/06/15/2550449.html List容器双向线性表list容器 list类定义了双向的线性表.V ...