C++ 圆与圆之间的距离是不能一概而论的

这篇博客介绍了如何在给定平面上的多个互不相切的圆中,计算任意两个圆之间的最短路径,该路径通过圆弧而非直接直线。题目描述了路径定义,并提供了输入输出格式。博客提供了一个C++代码示例来解决这个问题,读者可以期待学习到有关几何算法和C++编程的知识。
摘要由CSDN通过智能技术生成

【题目描述】

给定平面上 n 个圆,这些圆之间只有包含和分离两种关系(不存在相切的情况)。

定义两个圆之间的距离是从圆 A 到圆 B 经过的圆弧的最小个数,但是不包括圆 A 和圆 B
的圆弧。两个圆之间的路径不一定只是走直线,还可以存在绕弯的情况。

在这里插入图片描述

对于上述情况,从绿色圆到橙色圆的距离是 0,而从红色圆到橙色圆的距离是 1。

给出 q 个询问,每个询问的格式形如 u, v,对于每个询问,都需要回答第 u 个圆到第 v 个圆之间的最短距离。

【输入格式】

第一行一个整数n,表示圆的个数。

接下来n行,每行三个整数xi,yi,ri表示第 i 个圆的圆心与半径。

第 n + 2 行一个整数 q 表示询问的个数。

接下来 q 行,每行两个整数 u, v,表示需要求第 u 个圆到第 v 个圆的最短距离。

【输出格式】

对于每个询问,输出一行一个整数表示答案。

【样例 1 输入】

5
9 -7 4
0 -6 4
-6 10 1
9 8 2
-1 9 8
2
5 3
2 3

【样例 1 输出】

0
1

在这里插入图片描述

CODE<代码>

#include <bits/stdc++.h>
#define for1(i,n) for(i=1;i<=(n);i++)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=100005;
int n,q,dep[N],f[N][20],cs[N],cp,b[N],si[N],t[N];
struct nd{
   
	int x,y,r,id;
	bool operator<(const nd &n1)const{
   
		return y-r<n1.y-n1.r;
	}
	bool p(nd &n1){
   
		return r+y<n1.y-n1.r;
	}
	bool dr(nd &n1){
   
		ll dy=(ll)y-n1.y+n1.r,dx=x-n1.x;
		return dx>=0||(ull)((ll)dx*dx)+(ull)(dy*dy)<(ll)r*r;
	}
	bool d(nd &n1){
   
		ll dy=(ll)y-n1.y+n1.r,dx=x-n1.x;
		return (ull)((ll)dx*dx)+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༺Blog༒Hacker༻

您的鼓励将是我更新最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值