wiki 2490 导弹拦截塔
2013-09-23 21:16
二分答案+匈牙利判断
对于每一个时间,我们重新建一张二分图,由于每个塔可能打多次,所以要拆点,
对于每个拆的点的可行飞行距离为(mid-t1)-(ll-1)*(t1+t2)*v,其中mid为二分的答案
ll为将当前的点拆成第几个点(因为拆的点的时间是不一样的),然后依次判断该点和
入侵者的距离是否小于,是则加边。
建完图之后判断是否存在完美匹配,存在则向下二分,否则向上二分。
//吐槽下,靠靠,t1的单位是秒,t2的单位是分钟。。。
代码只是过了数据,好多地方都可以优化。
比较弱,二分没有标程写的好,标程可以直接得到最后答案。
//By BLADEVIL
var
n, m, t2, v :longint;
t1 :real;
dis :array[0..100,0..100] of real;
ans :real;
pre, other, last :array[0..200100] of longint;
link :array[0..100] of longint;
flag :array[0..100] of boolean;
x1, x2, y1, y2 :array[0..100] of longint;
l :longint;
len :array[0..200100] of real;
procedure init;
var
i, j :longint;
begin
read(n,m,t1,t2,v);
for i:=1 to m do read(x2[i],y2[i]);
for i:=1 to n do read(x1[i],y1[i]);
t1:=t1/60;
for i:=1 to n do
for j:=1 to m do
dis[i,j]:=sqrt((x1[i]-x2[j])*(x1[i]-x2[j])+(y1[i]-y2[j])*(y1[i]-y2[j]));
end;
procedure connect(x,y:longint; z:real);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end;
function find(i:longint):boolean;
var
q, p :longint;
begin
q:=last[i];
while q<>0 do
begin
p:=other[q];
if (not flag[p]) then
begin
flag[p]:=true;
if (link[p]=0) or (find(link[p])) then
begin
link[p]:=i;
exit(true);
end;
end;
q:=pre[q];
end;
exit(false);
end;
procedure judge(low,high:real);
var
mid :real;
tot :longint;
i, j, ll :longint;
k :longint;
count :longint;
begin
if high<low then exit;
fillchar(last,sizeof(last),0);
fillchar(link,sizeof(link),0);
tot:=0;
l:=1;
mid:=(low+high)/2;
k:=trunc(((mid-t1)/(t1+t2))+1);
for i:=1 to n do
for ll:=1 to k do
begin
inc(tot);
for j:=1 to m do
if (((mid-t1)-(ll-1)*(t1+t2))*v)>=dis[i,j]
then connect(tot,j,dis[i,j]/v+(ll-1)*(t1+t2)+t1);
end;
count:=0;
for i:=1 to tot do
begin
fillchar(flag,sizeof(flag),false);
if find(i) then inc(count);
end;
if (high-low<1e-8) then
if count>=m then
begin
ans:=mid;
end else exit;
if count>=m then
begin
ans:=mid;
judge(low,mid-1e-8);
end else judge(mid+1e-8,high);
end;
procedure main;
begin
judge(1,30000);
writeln(ans:0:6);
end;
begin
init;
main;
end.
wiki 2490 导弹拦截塔的更多相关文章
- Codevs2490 导弹防御塔
2490 导弹防御塔 2490 导弹防御塔 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description Freda的城堡—— ...
- wiki oi 1044 拦截导弹
题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某 ...
- HDU-1257 导弹拦截系统 http://acm.hdu.edu.cn/showproblem.php?pid=1257
Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高 ...
- AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- 【codevs1044】导弹拦截问题与Dilworth定理
题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某 ...
- TYVJ P1020 导弹拦截 Label:水
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- bzoj2044: 三维导弹拦截
Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A ...
- bzoj3035: 导弹防御塔
Description Freda的城堡——“Freda,城堡外发现了一些入侵者!”“喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~”“可是入侵者已经接近城堡了呀!”“别担心,rain ...
- nyoj 79 导弹拦截
点击打开链接 拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发 ...
随机推荐
- js学习日记-常用正则符号参考
预定义类 量词 贪婪.惰性.支配性量词 前瞻 边界 RegExp是全局对象,RegExp.$1...$9是全局属性.当执行任意正则表达式匹配操作时,JavaScript会自动更新全局对象RegExp上 ...
- MySQL高可用之PXC安装部署(续)
Preface Yesterday I implemented a three-nodes PXC,but there were some errors when proceeding ...
- 6.1 python+appium元素定位方式(登录app)
1.0.0 :常见的十种元素定位方式 .driver.find_element_by_id() #id定位 .driver.find_element_by_name() #name定位(已经凉 ...
- cocos2d-x 键盘和鼠标事件
出了菜单可以响应用户事件外,cocos2d中的层(Layer)也可以响应事件.层能够自动响应窗口事件,这些事件主要是键盘和鼠标事件,cocos2d中事件处理是通过Pyglet的事件处理完成的. 1.键 ...
- 测试理论- the conten of test plan
1 testing objects 测试对象 2 testing scope 测试范围 3 testing the frame (?) 4 the environment 5 reason for t ...
- Android stateMachine分析
StateMachine与State模式的详细介绍可以参考文章:Android学习 StateMachine与State模式 下面是我对于StateMachine的理解: 先了解下消息处理.看下Sta ...
- 【翻译】ASP.NET Core 文档目录
微软官方CORE 2.0正式版中文文档已经出来了,地址:https://docs.microsoft.com/zh-cn/aspnet/core/ 简介 入门 创建一个Web应用程序 创建一个Web ...
- APP与智能手表是如何通信的【本文摘抄自深圳尚锐科技】
APP与智能手表是如何通信的 1. Android 与服务器的通信方式主要有两种,一种是http 通信 ,一种是socket 通信. 两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请 ...
- Object类中的五种方法
clone() Object类源码:protected native Object clone() throws CloneNotSupportedException; 这里有个问题:为什么Sun公司 ...
- ArcGis下的叠加分析
1矢量与矢量叠加的话就用ToolBox里有Overlay: 2如果是矢量和栅格叠加的话用Spatial analysis模块中的 zonal statistics: 3还有就是栅格与栅格的叠加S ...