【学习笔记】浅谈闵可夫斯基和

news2025/8/13 13:16:54

学这东西主要是 这道题 要用 233

定义:给定两个凸包 A A A, B B B,定义 C = { a + b ∣ a ∈ A , b ∈ B } C=\{a+b|a\in A,b\in B\} C={a+baA,bB} ,其中 a a a, b b b均为坐标。

不好意思图是嫖的

在这里插入图片描述
首先我们感性认识一下。可以直接将一个凸包的顶点换成另一个凸包,然后保留外层凸包。

在这里插入图片描述
于是我们看出来合并后凸包大小为 ∣ A ∣ + ∣ B ∣ |A|+|B| A+B。可以看成从一个凸包跳到另一个凸包再跳回来。

对于下凸壳闵可夫斯基和,下凸壳就是凸壳下部分的点集,可以看成被下方平行光照射的部分。

在这里插入图片描述

可以发现其本质就是差分数组合并后的结果。复杂度 O ( ∣ A ∣ + ∣ B ∣ ) O(|A|+|B|) O(A+B)

回到 假人 这道题。我们知道结论 f ( i ) f(i) f(i)按模 12 12 12分组构成凸包,这启发我们采用分治算法,用闵可夫斯基和将左右凸包两两合并即可。

代码咕了。

代码来了。借鉴了一下std的做法。

#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define pb push_back
#define db double
#define mp make_pair
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
int n,m,ps[100005];
vector<int>a[100005];
struct Data{
	vector<ll>vec[12];
};
void chmax(ll &x,ll y){x=max(x,y);}
inline void Merge(const Data &a, const Data &b, Data &c) {
	for (int i = 0; i < 12; i++) if (a.vec[i].size()) {
		for (int j = 0; j < 12; j++) if (b.vec[j].size()) {
			int dlt = (i + j >= 12), k = (i + j) % 12;
			int x = 0, y = 0;
			while (true) {
				chmax(c.vec[k][x + y + dlt], a.vec[i][x] + b.vec[j][y]);
				if (x == (int)a.vec[i].size() - 1 && y == (int)b.vec[j].size() - 1) break;
				if (x == (int)a.vec[i].size() - 1) y++;
				else if (y == (int)b.vec[j].size() - 1) x++;
				else {
					if (a.vec[i][x + 1] - a.vec[i][x] > b.vec[j][y + 1] - b.vec[j][y]) x++;
					else y++;
				}
			}
		}
	}
}
Data solve(int l, int r) {
	if (l == r) {
		Data ret;
		for (int i = 0; i < (int)a[l].size(); i++) ret.vec[i].push_back(a[l][i]);
		return ret;
	}
	int mid = (l + r) >> 1;
	Data a = solve(l, mid), b = solve(mid + 1, r), ret;
	for (int i = 0; i < 12; i++) {
		for (int j = i; j <= ps[r] - ps[l - 1]; j += 12) {
			ret.vec[i].push_back(-1);
		}
	}
	Merge(a, b, ret);
	return ret;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n;for(int i=1;i<=n;i++){
		int k;cin>>k,m+=k,ps[i]=ps[i-1]+k-1;for(int j=0;j<k;j++){
			int x;cin>>x,a[i].pb(x);
		}
	}Data res=solve(1,n);
	for(int i=0;i<=m-n;i++)cout<<res.vec[i%12][i/12]<<" ";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现登陆模块时Cookie,Session,Token的理解

目录引言一、简化版登陆&#xff08;不保存登录状态&#xff09;二、Session 登陆三、CookieSession 实现登录四、Token登陆引言 先思考问题&#xff1a; 1、如何实现登陆&#xff1f; &#xff08;1&#xff09;表单输入账号密码 &#xff08;2&#xff09;后台数据库验证 …

治愈系书单|林曦《只生欢喜不生愁》

《只生欢喜不生愁》是水墨画家林曦的艺术生活随笔集&#xff0c;谈艺术之道&#xff0c;论无用之美。      全书按主题分为六辑&#xff1a;“艺可通道”“观照世间”“得自在禅”“心安之所”“写给时间”“赤子之心”&#xff0c;文字轻盈、意境优雅。林曦以手艺人之道&a…

Java#13(String Builder介绍及其常用办法)

目录 一.String Builder 1.理解:可以将String Builder当作一个容器,创建之后的内容是可以变的 2.作用:可以提高字符串的操作效率 二. StringBuilder中的常用方法 1.public StringBuilder append (任意类型) 添加数据&#xff0c;并返回对象本身 2.public StringBuild…

Keysight是德科技e5063A网络分析仪-安泰测试

Keysight E5063A ENA 是一款经济适用的台式矢量网络分析仪&#xff0c;可用于测试简单的无源元器件&#xff0c;例如频率最高达到 18 GHz 的天线、滤波器、电缆或连接器。 作为业界闻名的 ENA 系列中的一员&#xff0c;它传承了一致的测量框架&#xff0c;以便提高效率和生产率…

大学生静态HTML鲜花网页设计作品 DIV布局网上鲜花介绍网页模板代码 DW花店网站制作成品 web网页制作与实现

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

RabbitMQ初步到精通-第二章-RabbitMQ介绍

第二章 RabbitMQ介绍 1、RabbitMQ简介 RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。RabbitMQ最初起源于金融系统&#xff0c;用于在分布式系统中存储转发消息&#xff0c;在易用性、扩展性、高可用性等方面表现不俗。 rabbit- 兔子&#xff0c;兔子的特点是什么? 轻…

图解https读书笔记

7.确保Web安全的HTTPS 7.2 HTTP 加密 认证 完整性保护 HTTPS https http ssL(Secure socket layer)client: 使用servcer端的publickey对消息加密-----》server&#xff1a;收到消息&#xff0c;用privatekey进行解密参考&#xff1a;彻底搞懂HTTPS的加密原理_峰子2012的博…

VS+QT错误集合

主要是使用VSQT时遇到等一些问题&#xff0c;现在使用等是VS2015&#xff08;专业版&#xff09; QT5.13.1 这章主要解决遇到的无法解析等外部符号这类问题 1、LNK2001 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl Process::metaObject…

【分析笔记】Linux 4.9 backlight 子系统分析

相关信息 内核版本&#xff1a;Linux version 4.9.56 驱动文件&#xff1a;lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上&#xff0c;面对应用层提供统一的设备节点入口同级&#xff0c;面对驱动层提供设备驱动加载卸载通知事件&#xff0c;以及背光…

闲人闲谈PS之三十二——业务工程预算和PS成本计划

惯例闲话&#xff1a;年底&#xff0c;又要开始忙了&#xff0c;今年这一年&#xff0c;收获还不错&#xff0c;至少规划了第三年实现的目标——工程行业彩虹图&#xff0c;在今年居然奇迹般的实现了&#xff0c;看样子闲人还是保守了。还是应验了那句话&#xff0c;只要标准化…

React插槽

在开发中&#xff0c;我们抽取了一个组件&#xff0c;但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固定的div、span等等这些元素。我们应该让使用者可以决定某一块区域到底存放什么内容。这里可以使用插槽。 而在React中&#xff0c;我们可以通…

Spring Cloud Circuit Breaker 使用示例

Spring Cloud Circuit Breaker 使用示例 作者&#xff1a; Grey 原文地址&#xff1a; 博客园&#xff1a;Spring Cloud Circuit Breaker 使用示例 CSDN&#xff1a;Spring Cloud Circuit Breaker 使用示例 说明 Spring Cloud Circuit breaker提供了一个跨越不同断路器实现…

留学Essay写作怎么注意具体结构?

留学生都知道Essay一般分为Introduction,Main Body和Conclusion这三个部分&#xff0c;Introduction说明了文章的整体内容&#xff0c;但本身并没有提出任何论点&#xff1b;Conclusion通常简要地概括了正文的要点&#xff0c;并建议进一步研究给出一些或结论性的想法&#xff…

Springboot实现ENC加密

目录1. 为什么要用ENC加密2. jasypt实现ENC加密1. 实现流程2. 说明1. 自定义加密秘钥1. 盐、前缀、后缀2. 自定义加密方案2. 部署方案1. 为什么要用ENC加密 以下是未经过加密的数据库配置&#xff0c;密码均是采用明文密码&#xff0c;很容易导致数据库泄露。 spring:datasou…

gitlab 简单优化 gitlab cpu高,内存高 gitlab 负载飙高

1.首先要说得是&#xff0c;优化不能解决根本问题&#xff0c;机器小水管&#xff0c;再优化还是不行。 我感觉4核8g应该可以&#xff0c;截图这机器是阿里云送的免费一个月 4核8g 内存&#xff0c;不知是不是送得问题&#xff0c;感觉也是hold不住。 负载逛逛升&#xff0c;8…

【springboot】19、数据库操作

文章目录基本说明默认数据源HikariDataSource切换数据源为Druid基本说明 这篇文章介绍如何在springboot的项目中进行数据库的连接&#xff0c;完成数据库操作。 默认数据源HikariDataSource HikariDataSource是springboot的默认数据源&#xff0c;性能十分优秀&#xff0c;我…

【Hack The Box】windows练习-- love

HTB 学习笔记 【Hack The Box】windows练习-- love &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年9月7日&#x1f334; &#x1f36d…

【freeRTOS】操作系统之四-事件标志组

事件标志组是实现多任务同步的有效机制之一。 ​ 搞个全局变量不是更简单&#xff1f;其实不然&#xff0c;在裸机编程时&#xff0c;使用全局变量的确比较方便&#xff0c;但是在加上 RTOS 后就是另一种情况了。 使用全局变量相比事件标志组主要有如下三个问题&#xff1a; …

人工智能 AI 绘画 AI绘制的图片 ? 简介的版权,以及如何使用图像生成AI 绘画 ?

人工智能 AI 绘画 AI绘制的图片 ? 简介的版权&#xff0c;以及如何使用图像生成AI 绘画 ? 我认为&#xff0c;许多人认为工作的绘画是人类独有的。 然而&#xff0c;在最新的&#xff0c;大赦国际还可以在工作的绘画和绘画创作大赦国际已经生一个接一个。和有些人感到惊奇的…

Docker从入门到精通,一文详解

一、Docker简介 1、背景 物理机时代 一个物理机上安装操作系统&#xff0c;然后直接运行我们的软件。也就是说你电脑上直接跑了一个软件&#xff0c;并没有开虚拟机什么的&#xff0c;资源极其浪费。 缺点 部署慢成本高 虚拟机都不开&#xff0c;直接上物理机部署应用&#x…