当前位置: 首页 > news >正文

CF1408D Searchlights

CF1408D Searchlights

注意到所有海盗有三种方式摆脱所有探照灯的控制:

1、一直向上走

2、一直向右走

3、向上走到某点后一直向右走

前两种比较好处理。对于第 \(3\) 种,不难发现只有当全局中点在灯的边界线上才会影响答案(但可能不走到边界线上更优)。这样的边界线最多 \(2000\) 条,所以我们可以先处理出每个海盗到每条边界线的距离 \(d\),将其走到此处还需要向右走才能走出去的步数记为 \(f_d\)。设当前向上走了 \(i\) 步,则答案就是 \(\min (i + \max f_i)\)

注意倒着扫描边界线并且先更新 \(f_d\),这样才能包括未走到边界线上的情况。最后更新答案。

时间复杂度为 \(O(nm)\)

#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l); i <= (r); ++ i)
#define G(i,r,l) for(int i(r); i >= (l); -- i)
#define pii pair<int, int>
#define mp make_pair
#define fi first
#define se second
using namespace std;
using ll = long long;
const int N = 3000;
const int MAXN = 1e6;
int f[1005000];
int n, m, mx, ans = 0, nw;
int a[N], b[N], c[N], d[N];
signed main(){ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin >> n >> m;F(i, 1, n) cin >> a[i] >> b[i];F(i, 1, m) cin >> c[i] >> d[i];F(i, 1, n){F(j, 1, m){if(a[i] <= c[j] && b[i] <= d[j]){mx = max(mx, d[j] - b[i]);f[d[j] - b[i]] = max(f[d[j] - b[i]], c[j] - a[i] + 1);}}}ans = mx + 1;
//	cout << ans << '\n'; G(i, mx, 0){nw = max(nw, f[i]);ans = min(ans, nw + i);}cout << ans << '\n';return fflush(0), 0;
}
http://www.sczhlp.com/news/11208/

相关文章:

  • 题解:SP707 TFSETS - Triple-Free Sets
  • Vue 命名规范指南
  • mq bug 处理
  • 从训练到推理:Intel Extension for PyTorch混合精度优化完整指南
  • Window系统怎么设置定时关机
  • node 运行项目报超内存
  • 如何恢复被删除的日志文件以追踪攻击者
  • 3.浮点数及其应用
  • Qt事件过滤器之eventFilter函数返回值
  • Ubuntu系统小优化
  • ARM CPU的 intrinsics指令集 - svsel_u32
  • PowerShell检查IP是否为保留IP
  • 第三十篇
  • 莫队卡常
  • CSP-S模拟10
  • 2025年macOS安装MongoDB详细教程
  • RJ45接口旁边的两个指示灯通常用于显示网络连接的状态,帮助用户诊断连接是否正常。一般来说,它们的功能如下:
  • Github使用教程(详细图文)
  • 8. 面向对象编程 8.9 內部类
  • keil界面图标消失解决办法
  • raid磁盘阵列介绍
  • 焊接机械手氩气节省的方式
  • 【CAPL】循环码的创建和校验
  • python使用mongodb工具类 - 与光同尘
  • 2025 暑期 mx 集训 7.25
  • 一文带你快速了解招聘管理系统
  • Vue 的 nextTick 的原理是什么?
  • ARM CPU的 intrinsics指令集 - svcmpgt_u32
  • 河南萌新联赛2025第(五)场:信息工程大学”题解
  • IP_UV_PV介绍