| 题目名称 | 4236. 引爆炸弹 |
|---|---|
| 输入输出 | bomb.in/out |
| 难度等级 | ★★ |
| 时间限制 | 1000 ms (1 s) |
| 内存限制 | 128 MiB |
| 测试数据 | 10 |
| 题目来源 |
|
| 开放分组 | 全部用户 |
| 提交状态 | |
| 分类标签 | |
| 分享题解 |
| 通过:1, 提交:3, 通过率:33.33% | ||||
|
|
100 | 0.163 s | 5.34 MiB | C++ |
|
|
0 | 0.184 s | 5.34 MiB | C++ |
|
|
0 | 11.006 s | 3.31 MiB | C++ |
| 关于 引爆炸弹 的近10条评论(全部评论) | ||||
|---|---|---|---|---|
|
本体虽然可以用两遍单调栈过,但希望大家能用图论解法
2025-12-18 20:44
1楼
| ||||
现有 n 个炸弹,第 i 个炸弹的位置为 $a_i$,爆炸半径为 $r_i$。保证对于任意$1≤i<n$,都有$a_i≤a_{i+1}$。当某个炸弹被引爆时,会触发连锁反应:所有位置落在区间 $[a_i - r_i, a_i + r_i]$ 内的炸弹都会被引爆;而被引爆的炸弹又会以相同规则触发新的连锁反应,直至没有更多炸弹可被引爆。请你找出最优引爆目标(即选择某一个炸弹作为初始引爆点),使得最终被引爆的炸弹总数最多,并输出该最大数量。
第一行输入一个整数 n,表示炸弹的总数;
第二行输入 n 个整数,依次表示每个炸弹的位置 a[1], a[2], ..., a[n];
第三行输入 n 个整数,依次表示每个炸弹的爆炸半径 r[1], r[2], ..., r[n]。
输出一个整数,表示选择最优初始炸弹引爆时,最多能被引爆的炸弹总数。
5
1 3 6 10 11
3 1 2 4 0
3
引爆炸弹$4$可以引爆$[3,5]$的炸弹 可以证明不存在更优的引爆炸弹的方案
对于 30% 数据,$n≤100$
对于 50% 数据,$n≤5*10^3$
对于 100% 数据,$1≤n≤10^5$,$0≤|a_i|$,$r_i≤10^9$