MT3016 竹鼠通讯

2024-04-04 10:28
文章标签 通讯 竹鼠 mt3016

本文主要是介绍MT3016 竹鼠通讯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在真空中,一块无限平坦光滑绝缘不导热草地上有很多光滑且相同球形竹鼠,它们的坐标为(xi​,yi​)。竹鼠之间会通过脑电波联系彼此。现在请问相距最近两只竹鼠的直线距离分别是多少(所有竹鼠都在草地的第一象限)?

格式

输入格式:

第一行一个整数n;
接下来 n行每行两个非负浮点数,xi​,yi​,表示第 i个点的 X 坐标与 Y 坐标。xi​,yi​都精确到小数点后两位。

输出格式:

一行,一个浮点数,最短距离。精确到小数点后4位。

样例 1

输入:

4
0.0 0.0
0.0 1.0
1.0 0.0
1.0 1.0

输出:

1.0000
备注

其中: 0≤n≤10^5,竹鼠的坐标数据范围在int型范围内。并且可能会有重叠的竹鼠。

思路:模板题,最近点对问题,用分治解决。

即将区域分成  l----mid---r,即最短距离有三种情况:全在左边、全在右边、一个在左一个在右

#include <bits/stdc++.h>
using namespace std;
#define INF 10000000001
const int N = 1e5 + 7;
struct node
{double x, y;
} a[N];
int n, t[N];
double ans = 0;
bool cmp(node &a, node &b)//x,y升序
{if (a.x < b.x)return true;else if (a.x == b.x && a.y < b.y)return true;elsereturn false;
}
bool cmp2(int &i, int &j)
{if (a[i].y < a[j].y) // 按y升序return true;elsereturn false;
}
double dis(int i, int j)
{double c = sqrt((a[i].x - a[j].x) * (a[i].x - a[j].x) + (a[i].y - a[j].y) * (a[i].y - a[j].y));return c;
}
double merge(int l, int r)
{if (l == r)//重叠return INF;if (l == r - 1)return dis(l, r);int mid = (l + r) / 2;double d1 = merge(l, mid);double d2 = merge(mid + 1, r);ans = min(d1, d2); // 求全在左边和全在右边的最小值int k = 0;// 求一左一右的最小值for (int i = l; i <= r; i++){if (fabs(a[i].x - a[mid].x) <= ans) // 将一左一右的编号写入t{t[k] = i;k++;}sort(t, t + k, cmp2);for (int i = 0; i < k; i++){for (int j = i + 1; j < k && a[t[j]].y - a[t[i]].y < ans; j++){ans = min(ans, dis(t[i], t[j]));}}}return ans;
}
int main()
{cin >> n;for (int i = 0; i < n; i++)cin >> a[i].x >> a[i].y;sort(a, a + n, cmp);printf("%.4f", merge(0, n - 1));
}

这篇关于MT3016 竹鼠通讯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875529

相关文章

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒实现进行数据的交互。该流程实际以STM32F0、F1、F3、F4、F7实测好用(理论上都适用),这三种型号单片机

关于Qt在子线程中使用通讯时发生无法接收数据的情况

在多线程应用中,串口通讯或TCP通讯的场景常常涉及到持续的读写操作,如果子线程处理不当,可能会导致信号阻塞问题。本文将通过串口通讯或TCP通讯为例,详细解释如何在多线程环境中避免信号阻塞,并提供代码示例。 1. 问题背景 假设我们在一个应用程序中使用多线程处理串口或TCP通讯,通常会在子线程中实现持续的数据读取。为了确保实时处理数据,常见的做法是在子线程的 run() 方法中使用 while

QQ通讯协议

不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。 二、聊天消息通信。       采用UDP协

串口与Labview通讯的调试

在学习Labview和串口的通讯和调试的时候。首先必须先了解一些Labview的基础知识,然后就是了解串口,在调试的过程中,我们需要下位机来辅助我们的程序编写与调试,也就是我们平时使用的单片机,如果没有单片机也不要紧,可以使用虚拟串口来把电脑的串口相连接,这样也可以达到我们的预期效果 工欲善其事,必先利其器 让我们先来做一些准备工作 在这里可以把两个虚拟的串口相连接,在上图的左边,可以看到我

不等了,华为计划在5.5G阶段就实现6G的空天地一体通讯网络功能

朋友们,你们是否曾经幻想过,无论身处何地,都能保持与世界的无缝连接?在偏远的山区、在茫茫的大海、甚至是在飞机上,都能享受畅通无阻的网络服务? 现在,这不再是幻想,华为正计划将这一切变为现实。在最近召开的空天信息产业国际生态大会上,华为的余承东宣布了一项激动人心的计划——在5.5G时代就实现6G的空天地一体通讯网络功能。 一、星地融合,永不失联 华为一直在探索如何将卫星通信技术与地面网络相

副本技能-使用RabbitMQ做即时消息通讯,使用STOMP协议

1.消息通讯的基础环境 技术使用: 后端使用Spring Websocket通讯,前端使用SocketJS,非长连接,有心跳检测信息交互使用RabbitMQ的插件Stomp 给RabbitMQ安装Stomp的插件 安装前: 安装后: 安装步骤(我的RabbitMQ是使用的Docker) 1.进入Docker容器RabbitMQ的后台(docker exec -it 容器ID /bin

java与modbusRtu(COM口)通讯

modbous协议通讯byte数据解析含义 依赖的modbus包请看java与modbusTcp通讯JDK中配置串口通讯能力 提取码:hmfn串口模拟工具 提取码: npqx依赖串口协议包: <dependency><groupId>org.rxtx</groupId><artifactId>rxtx</artifactId><version>2.1.7</version></depende

SGM41511电源管理芯片与STM32L496通讯源码虚拟I2C协议实测成功读写cubemx设置裸机和freertos操作系统源码通用

不用它的I2C设置,容易出错不通讯,只打开GPIO输出就可以; 如果是RTOS的话请打开系统定时器提供参考时间基准,那个定时器都行; 以下是经过验证的代码,同样适用于SGM同类系列电源管理芯片; 准备好jlink进行RTT打印观测: SGM41511.c /**************************************************************

【通讯协议数据采用大/小端存储的探讨】

前言 在嵌入式系统和网络通信中,数据的字节序是一个不可忽视的细节。不同的设备可能采用不同的字节序,常见的有大端和小端两种。小端字节序,即最低有效字节存储在最低的内存地址,在网络协议中应用普遍。本文将通过一个简单的示例,探讨如何在C语言中实现小端存储,并构建符合特定通讯协议的数据包。 实例 1.示例代码 以下是一个使用C语言编写的示例程序,该程序演示了如何将数据以小端存储的方式复制到通讯帧中: