计算几何,CF 993A - Two Squares

news2024/11/15 11:00:56

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

A - Two Squares

二、解题报告

1、思路分析

由于数据量很小,可以暴力判断一个正方形的每个点是否在另一个正方形内

数据量大的话,可以套用计算几何中 判断线段相交 的方式

由于本题是正方形,只不过第二个正方形旋转了45°,那么我们可以考虑更简单的做法(因为判断线段相交也是有一些corner case的)

对于(x, y) ,顺时针旋转45°后为((x + y) / sqrt(2), (x - y) / sqrt(2))

然后判断square1 每个点是否在square2 中(二者需要旋转)

然后判断square2 每个点是否在square1 中(二者不需要旋转)

但这样并非是充分的,下面这个特判跟前段时间力扣逆天3100分计算几何题类似

我们判断下square1 的中心是否在square2中,比如下面这个情况

证明充分性其实也好证明,因为一个是正方形,一个是旋转45°正方形,如果二者相交且没有任何一个正方形的一个点被另一个包含,我们无法构造出中心不被包含的情况的

2、复杂度

时间复杂度: O(1)空间复杂度:O(1)

3、代码详解

 ​
#include <bits/stdc++.h>

using i64 = long long;
using i32 = unsigned int;
using u64 = unsigned long long;
using i128 = __int128;

constexpr int inf32 = 1E9 + 7;
constexpr i64 inf64 = 1E18 + 7;

void solve() {
	std::array<int, 8> s1, s2;
	// U D L R
	std::array<int, 4> dir1, dir2;
	dir1[0] = dir2[0] = -inf32, dir1[1] = dir2[1] = inf32, 
	dir1[2] = dir2[2] = inf32, dir1[3] = dir2[3] = -inf32;

	for (int i = 0; i < 4; ++ i) {
		std::cin >> s1[i * 2] >> s1[i * 2 + 1];
		dir1[0] = std::max(dir1[0], s1[i * 2 + 1]);
		dir1[1] = std::min(dir1[1], s1[i * 2 + 1]);
		dir1[2] = std::min(dir1[2], s1[i * 2]);
		dir1[3] = std::max(dir1[3], s1[i * 2]);
	}

	for (int i = 0; i < 4; ++ i) {
		std::cin >> s2[i * 2] >> s2[i * 2 + 1];
		dir2[0] = std::max(dir2[0], s2[i * 2] - s2[i * 2 + 1]);
		dir2[1] = std::min(dir2[1], s2[i * 2] - s2[i * 2 + 1]);
		dir2[2] = std::min(dir2[2], s2[i * 2] + s2[i * 2 + 1]);
		dir2[3] = std::max(dir2[3], s2[i * 2] + s2[i * 2 + 1]);
	}


	for (int i = 0; i < 4; ++ i) {
		int x = s1[i * 2], y = s1[i * 2 + 1];
		if (x + y >= dir2[2] && x + y <= dir2[3] && x - y <= dir2[0] && x - y >= dir2[1]) {
			std::cout << "YES\n";
			return;
		}

		x = s2[i * 2], y = s2[i * 2 + 1];
		if (x >= dir1[2] && x <= dir1[3] && y <= dir1[0] && y >= dir1[1]) {
			std::cout << "YES\n";
			return;
		}
	}

	int x = 0, y = 0;

	for (int i = 0; i < 4; ++ i) {
		x += s1[i * 2], y += s1[i * 2 + 1];
	}

	x /= 4, y /= 4;

	if (x + y >= dir2[2] && x + y <= dir2[3] && x - y <= dir2[0] && x - y >= dir2[1]) {
		std::cout << "YES\n";
		return;
	}

	x = 0, y = 0;

	for (int i = 0; i < 4; ++ i) {
		x += s2[i * 2], y += s2[i * 2 + 1];
	}

	std::cout << "NO\n";
}

auto FIO = []{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);
	return 0;
}();

int main () {
	#ifdef DEBUG
		freopen("in.txt", "r", stdin);
		freopen("out.txt", "w", stdout);
	#endif
	
	int T = 1;
	// std::cin >> T;
	while (T --)
		solve();

	return 0;
}

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

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

相关文章

《Redis核心技术与实战》学习笔记5——内存快照RDB:宕机后,Redis如何实现快速恢复?

文章目录 给哪些内存数据做快照&#xff1f;快照时数据能修改吗?可以每秒做一次快照吗&#xff1f;小结 大家好&#xff0c;我是大白。 上篇文章记录了 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持久化的数据量…

11.4k star! 部署清华开源的ChatGLM3,用私有化大模型无缝替换openai

转自AI技术实战 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的第三代开源模型&#xff0c;对话流畅、部署门槛低&#xff0c;测评显示其基础模型ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能&#xff0c;同时…

ESP32CAM人工智能教学19

ESP32CAM人工智能教学19 Udp socket服务器 本课的工作模式,正好是第十四课工作模式的相反:第十四课中,ESP32Cam是客户端,运行在PC中的Python程序是服务器,就收到了摄像头数据后,调用openCV组件显示图像。而本课的ESP32Cam是服务器,Python是客户端,正好掉了个个,目的就…

蓝桥杯编程题讲解

给定一个正整数 N ,然后将 N 分解成 3 个正整数之和。 计算出共有多少种符合要求的分解方法。 要求&#xff1a; 分解的 3 3 3个正整数各不相同; 分解的 3 3 3个正整数中都不含数字3和7. 如&#xff1a;N为8&#xff0c;可分解为 ( 1 , 1 , 6 ) (1,1,6) (1,1,6)、 ( 1 , 2 ,…

位图与布隆过滤器 —— 海量数据处理

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 位图 一&#xff1a; &#x1f525; 位图概念 二&#xff1a; &#x1f525; 位图的实现思路及代码实现三&#xff1a; &#x1f525; 位图的应用四&#xff1a;…

云原生系列 - Nginx(基础篇)

前言 学习视频&#xff1a;尚硅谷Nginx教程&#xff08;亿级流量nginx架构设计&#xff09;本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删学习文档&#xff1a; 云原生系列 - Nginx(基础篇) 1、简介 1.1、背景介绍 Nginx(enginex)是一个高性能的HTTP和…

SpringBoot教程(二十四) | SpringBoot集成日志AOP切面

SpringBoot教程&#xff08;二十四&#xff09; | SpringBoot集成日志AOP切面 &#xff08;一&#xff09;AOP 概要1. 什么是 AOP &#xff1f;2. 为什么要用 AOP&#xff1f;3. AOP一般用来干什么&#xff1f;4. AOP 的核心概念 &#xff08;二&#xff09;Spring AOP1. 简述2…

【芯智雲城】UDStore定制化存储模组和技术解决方案

一、方案详情&#xff1a; UDStore芯宇存储专注行业应用&#xff0c;根据不同应用场景&#xff0c;为客户提供包括车规级、工业级、工规宽温及高耐久型的存储模组产品和技术解决方案&#xff0c;可提供的产品和解决方案类型包括如下&#xff1a; 二、关键技术&#xff1a; 1&…

WLAN DNS proxy settings (Win 10)

WLAN DNS proxy settings (Win 10) 114.114.114.114 8.8.8.8

Ubuntu 22.04 安装 MySQL 8

Ubuntu 22.04 安装 MySQL 8 本文描述了Ubuntu安装MySQL 8的方法 CentOS7 的安装方法点击此处跳转 Windows 的安装方法点击此处跳转 Docker 的安装方法点击此处跳转 正文开始&#xff1a; 在一切开始之前&#xff0c;建议先切换到root #输入下方名&#xff0c;然后输入当…

【JavaSec】Java反射知识点补充

0x03反射-补充零散知识点 文章目录 0x03反射-补充零散知识点Runtime类setAccessible(true)三种命令执行的方法static变量赋值 前面学过 就不多说final变量赋值InDirect final间接赋值static final 向大佬致敬&#xff1a; https://drun1baby.top Runtime类 Runtime 类中有 …

JAVA itextpdf 段落自动分页指定固定行距打印

JAVA itextpdf 段落自动分页指定固定行距打印 前言&#xff1a;公司有个需求&#xff0c;打印的合同模板左上角要加上logo的图标。但是itext pdf 自动分页会按照默认的顶部高分页打印内容的&#xff0c;导致从第二页开始logo图标就会把合同的内容给覆盖掉了。然后尝试了挺多方法…

Electron31-ViteAdmin桌面端后台|vite5.x+electron31+element-plus管理系统Exe

原创自研Vue3Electron31ElementPlus桌面端轻量级后台管理Exe系统。 基于最新前端技术栈Vite5.x、Vue3、Electron31、ElementPlus、Vue-I18n、Echarts实战开发桌面端高颜值后台管理模板。内置4种布局模板&#xff0c;支持i18n国际化、动态权限路由&#xff0c;实现了表格、表单、…

基于Spring Boot的大学校园生活信息平台的设计与实现pf

TOC springboot523基于Spring Boot的大学校园生活信息平台的设计与实现pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关…

记录阿里云服务器购买和域名绑定解析的流程

购买阿里云域名和服务器 因为App备案的原因&#xff0c;需要购买域名和服务器&#xff0c;这篇文章介绍在阿里云上购买相关服务的流程。 注册阿里云的流程比较简单这里不再赘述了。请参考我之前写的 阿里云账号注册详细教程 购买顺序&#xff1a;一般是先购买阿里云服务器&…

【乐吾乐大屏可视化组态编辑器】事件交互-场景交互

场景交互 在线使用&#xff1a;https://v.le5le.com/ 乐吾乐大屏可视化可以实现大屏页面与内嵌2d/3d场景相互通信&#xff0c;底层原理是利用了iframe通过postMessage发送消息。 下面以2d场景为例&#xff0c;实现步骤如下&#xff1a; 1. 首先配置场景2&#xff08;被嵌入…

Postman接口测试项目实战

第 1 章 什么是接口测试 1.1、为什么要进行接口测试 目前除了特别Low的公司外&#xff0c;开发都是前后端分离的&#xff0c;就是说前端有前端的工程师进行编码&#xff0c;后端有后端的工程师进行编码&#xff0c;前后端进行数据基本都是通过接口进行交互的。 1.2、接口测…

ant design 的 tree 如何作为角色中的权限选择之一

这种功能如何弄呢&#xff1f; 编辑的时候要让权限能选中哦。 <ProForm.Item name"permissions" label{intl.formatMessage({ id: permission_choose })}><Spin spinning{loading}><TreecheckableonExpand{onExpand}expandedKeys{expandedKeys}auto…

StringJoiner以及字符串小练习

概述 String Joiner跟String Builder一样&#xff0c;亦可以看成是一个容器&#xff0c;创建之后iu里面的内容是可变的 作用 提高字符串的操作效率&#xff0c;而且代码编写特别简洁&#xff0c;但是目前市场上很少有人用 JDK8 package stringdemo;import java.util.String…

iTOP-3A5000开发板流畅运行国产系统外加机箱就是一台电脑主机

性能强 采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch)的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。 桥片 采用龙芯 7A2000&#xff0c;支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路 VGA&a…