题意

在二维平面有\(n\)个海盗,\(m\)个探照灯,你有两种操作

  • 将所有海盗往上走一步
  • 将所有海盗往右走一步

设海盗为\((a_i,b_i)\),探照灯为\((c_j,d_j)\),当且仅当\(a_i\leq c_j\)且\(b_i\leq d_j\)时,海盗在探照灯范围内,问最少多少次操作可以将所有海盗移动到所有探照灯范围外

分析

将题意抽象一下,找到一个二元组\((x,y)\),\(x\)表示向上走的步数,\(y\)表示向右走的步数,然后对于任何海盗\((a_i,b_i)\),都满足加上\((x,y)\)后,对于任何探照灯\((c_j,d_j)\)要么\(a_i+x>c_j\),要么\(b_i+y>d_j\),且\(x+y\)最小

那么我们\(O(nm)\)处理,找到海盗和探照灯之间的关系,若海盗在探照灯范围内,得到二元组\((x,y)\),有\(a_i+x>c_j\)且\(b_i+y>d_j\),得到所有二元组后,按照第一维排序

此时发现,遍历二元组,遍历到第\(i\)个二元组时,如果取该二元组的\(x\),那么\(y\)最小即为剩余二元组的最大值,这样可以满足前部分探照灯向上走即可脱离,剩余探照灯向右走即可脱离,注意答案初始值是只往右走时的答案

#pragma GCC optimize(3, "Ofast", "inline")

#include <bits/stdc++.h>

#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define int ll
#define ls st<<1
#define rs st<<1|1
#define pii pair<int,int>
#define rep(z, x, y) for(int z=x;z<=y;++z)
#define repd(z, x, y) for(int z=x;z>=y;--z)
#define com bool operator<(const node &b)const
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const int maxn = (ll) 3e5 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
int T = 1;
pii a[2005], b[2005];
int maxx[2005 * 2005]; void solve() {
int n, m;
cin >> n >> m;
rep(i, 1, n)cin >> a[i].first >> a[i].second;
rep(i, 1, m)cin >> b[i].first >> b[i].second;
vector<pii > v;
rep(i, 1, n) {
rep(j, 1, m) {
if (b[j].first < a[i].first || b[j].second < a[i].second)
continue;
v.push_back({max(b[j].first + 1 - a[i].first, 0ll), max(0ll, b[j].second + 1 - a[i].second)});
}
}
if (v.empty()) {
cout << 0;
return;
}
sort(v.begin(), v.end());
for (int i = v.size() - 1; i >= 0; --i)maxx[i] = max(maxx[i + 1], v[i].second);
int ans = maxx[0];
for (int i = 0; i < v.size(); ++i)ans = min(ans, v[i].first + maxx[i + 1]);
cout << ans;
} signed main() {
start;
while (T--)
solve();
return 0;
}

CodeForces 1408D Searchlights的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

  10. CodeForces - 453A Little Pony and Expected Maximum

    http://codeforces.com/problemset/problem/453/A 题目大意: 给定一个m面的筛子,求掷n次后,得到的最大的点数的期望 题解 设f[i]表示掷出 <= ...

随机推荐

  1. 【python基础】基本数据类型-字符串类型

    1.初识字符串 字符串就是一系列字符.在python中,用引号括起来文本内容的都是字符串. 其语法格式为:'文本内容'或者"文本内容" 我们发现其中的引号可以是单引号,也可以是双引 ...

  2. Spring Boot 自动配置一篇概览

    一.什么是自动配置 bean 自动配置类通过添加 @AutoConfiguration 注解实现. 因为 @AutoConfiguration 注解本身是以 @Configuration 注解的,所以 ...

  3. 现代 C++ 性能飞跃之:移动语义

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/Xd_FwT8E8Yx9Vnb64h6C8w 带给现代 C++ 性能 ...

  4. Vue——vuex使用、Router使用、localstorage、sessionstorage和cookie

    vuex使用 # vuex :状态管理器--->存数据(变量)的地方,所有组件都可以操作 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理( ...

  5. Grafana 系列-GaC-2-Grafana Terraform Provider 基础

    系列文章 Grafana 系列文章 Terraform 系列文章 概述 前文最后总结了我的工具选型: Grafana Terraform provider Jsonnet 我们今天先简单介绍 Graf ...

  6. 2023-06-21:redis中什么是BigKey?该如何解决?

    2023-06-21:redis中什么是BigKey?该如何解决? 答案2023-06-21: 什么是bigkey bigkey是指存储在Key-Value数据库中的键对应的值所占用的内存空间较大.举 ...

  7. 【论文阅读】CYCADA CYCLE-CONSISTENT ADVERSARIAL DOMAIN ADAPTATION

    github code CyCADA论文中,定义了一种问题--无监督适配,即仅提供源数据 \(X_S\) 和源标签 \(Y_S\),以及源域目标数据\(X_T\),没有目标标签或者不利用它.问题的目的 ...

  8. 使用TensorFlow进行自动化测试与部署

    目录 标题:<使用 TensorFlow 进行自动化测试与部署> 背景介绍: 随着人工智能和机器学习技术的快速发展,TensorFlow 成为了一个广泛应用的深度学习框架,被广泛用于构建神 ...

  9. Java 判断一个字符串是否是对称字符串 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串

    代码如下: public static void main(String[] args) { String str = "1QabcdcbaQ"; StringBuilder sb ...

  10. JVM中的-Xms 、-Xmx 参数该如何设置

    在 Java 虚拟机(JVM)中,-Xms 和 -Xmx 都是用来设置 JVM 堆内存大小的参数.其中,-Xms 用于设置 JVM 启动时分配的初始堆内存大小,而 -Xmx 用于设置 JVM 堆内存的 ...