题目描述请移步 https://www.luogu.com.cn/problem/P10936

  • 题目简述

n个防御塔,每个防御塔都有充足的导弹

导弹需要一定时间发出,又需要一定时间冷却

导弹有确定的速度,发出后会沿最短路径攻击任意一个入侵者

m个入侵者,给定防御塔和入侵者的坐标,求至少多久才能击退所有入侵者

  • 解题思路

经过分析,发现直接求最少多久似乎不太可行,于是考虑二分,将问题转化为验证一个时长是否可行

在一定时间内,每个防御塔可以发射固定数量个导弹,这些导弹必须可以击中所有的入侵者,否则不可行

我们可以处理出每个入侵者能被哪些导弹击中(第i个防御塔第1枚,第i个防御塔第2枚...),他必须被其中一枚击中

这有些类似二分图,将入侵者看作一类点,防御塔看作一类点,入侵者与能击中其的导弹连边

如果最大匹配小于入侵者数量,则不可行;反之,则可行

这样的复杂度或许有些高,但"N,M≤50"的数据还是可以通过的

  • 易错点
  1. 题目中t1的单位是秒,需先转成分钟

  2. 本题许多变量涉及小数,如t1,二分l_r_mid,还有check函数上传的量,注意使用double

  3. 先输入的是m个入侵者的坐标,而非n个防御塔

  • 代码实现
#include <iostream>
#include <utility>
#include <vector>
#include <cmath>
#include <cstring>
#include <iomanip>
using namespace std;
const int MAX=55;
const int MAXK=2505;
const double eps=1e-7;//二分精度
int n,m;
double t1,t2,v;
pair <double,double> a[MAX],b[MAX];
vector <int> edge[MAX];//哪些防御塔能打到这个敌人
int match[MAXK];//二分图匹配
bool vis[MAXK];
double dis(int i,int j){//欧几里得距离
return sqrt((a[i].first-b[j].first)*(a[i].first-b[j].first)+(a[i].second-b[j].second)*(a[i].second-b[j].second));
}
bool find(int x){//二分图
for(int j=0;j<edge[x].size();j++){
int now=edge[x][j];
if(vis[now]==false){
vis[now]=true;
if(match[now]==0||find(match[now])==true){
match[now]=x;
return true;
}
}
}
return false;
}
bool check(double x){
int tot=(x+t2)/(t1+t2);
tot=min(tot,m);//总共能发射多少枚导弹
for(int j=1;j<=m;j++){//敌人
edge[j].clear();
for(int i=1;i<=n;i++){//防御塔
for(int k=1;k<=tot;k++){
if(dis(i,j)/v+k*t1+(k-1)*t2<=x){//可以打到
edge[j].push_back((i-1)*tot+k);
}
}
}
}
memset(match,0,sizeof(match));
for(int i=1;i<=m;i++){
memset(vis,0,sizeof(vis));
if(find(i)==false){//如果有一个入侵者无法被击退则不可行
return false;
}
}
return true;
}
int main(){
cin>>n>>m>>t1>>t2>>v;
t1=t1/60.0;//注意t1单位是秒
for(int i=1;i<=m;i++){
cin>>b[i].first>>b[i].second;//入侵者
}
for(int i=1;i<=n;i++){
cin>>a[i].first>>a[i].second;//防御塔
}
double l=0,r=1e9;
while(r-l>eps){//小数二分
double mid=(l+r)/2.0;
if(check(mid)==true){
r=mid;
}else{
l=mid;
}
}
cout<<fixed<<setprecision(6)<<l;//依据题意保留小数
}

洛谷 P10936 导弹防御塔 题解的更多相关文章

  1. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  2. 「Poetize3」导弹防御塔

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

  3. CH6803 导弹防御塔

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

  4. Codevs2490 导弹防御塔

    2490 导弹防御塔 2490 导弹防御塔 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master         题目描述 Description Freda的城堡—— ...

  5. bzoj3035: 导弹防御塔

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

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

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

  7. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  8. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

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

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

  10. 02题解-洛谷 P2395 BBCode转换Markdown 题解

    洛谷 P2395 BBCode转换Markdown 题解 题目传送门: here. 一道毒瘤的大模拟,给了你一部分的 BBCode 和 Markdown 语法,叫你转换.如下表: BBCode Mar ...

随机推荐

  1. java Set HashSet详解

    Set集合 就像把对象随意扔进罐子里,无法记住元素的添加顺序.Set某种程度就是Collection,方法没有不同,只是行为稍微不同,(不允许重复元素),如果一定要往里加两个相同元素,添加失败add( ...

  2. HashMap集合--基本操作流程的源码可视化

    本文主要包含:HashMap 插入过程.扩容过程.查询过程和删除过程的源码可视化 文章对应的视频连接:https://www.bilibili.com/video/BV1wM3KzaE3d/ 1. 操 ...

  3. Layui 更新Table 表格内容的值

    $.ajax({ //请求方式 type: "POST", //请求地址 url: "/", //数据,json字符串 data: { }, //请求成功 su ...

  4. java -- 监听器、国际化

    监听器 监听器: 主要是用来监听特定对象的创建或销毁.属性的变化的! 是一个实现特定接口的普通java类! Servlet中哪些对象需要监听? request / session / servletC ...

  5. 让 Python 代码飙升330倍:从入门到精通的四种性能优化实践

    花下猫语:性能优化是每个程序员的必修课,但你是否想过,除了更换算法,还有哪些"大招"?这篇文章堪称典范,它将一个普通的函数,通过四套组合拳,硬生生把性能提升了 330 倍!作者不仅 ...

  6. 统计的系统客观性与动态进化性•Freq频率与Bayes两大学派及争论•统计推断•Bayes学派及其基本观点与Bayes估计

    统计的系统客观性: 统计数据及其活动不是片面的,而是系统客观反映客观现象. 周期的做"总体统计" + 随机/按需/周期做"抽样统计": 统计的动态进化性: 统计 ...

  7. mysql虚拟列(Generated Columns)及JSON字段类型的使用

    mysql 5.7中有很多新的特性,但平时可能很少用到,这里列举2个实用的功能:虚拟列及json字段类型 一.先创建一个测试表: drop table if exists t_people; CREA ...

  8. 又是一个里程碑,轻松超过200k

    7月17日,我刚为免费在线拼图工具的访问量突破100k而发了喜报,没想到才过了不到一周,7月23日这个数字就再次翻倍,超过了200k 如此迅猛的流量增长着实让我震惊,这在上一周还不敢想象,在一个月前更 ...

  9. leedcode:212. 单词搜索 II (trie树,dfs,剪枝)

    力扣链接:https://leetcode.cn/problems/word-search-ii/description/ 思路: 先建立字典树,将单词插入树中,建立ed数组表示cur节点的单词结尾表 ...

  10. 基于Android实现K歌场景下超低延时耳返

    1 功能简介 在音视频应用中我们经常涉及到耳机麦克风和设备麦克风的切换.不同声道的配置.在遇到这种情况的时候,我们如何配置呢? 耳返即耳机采集监听,在设备上插入耳机(普通耳机或蓝牙耳机)后,能从本机耳 ...