18233 万湖之国的形成

该文章描述了一个编程问题,涉及使用计算机模拟小行星碎片撞击平原形成湖泊的过程。给定每个碎片造成坑的圆心和半径,程序计算填满水后湖泊的总数。通过并查集数据结构解决相邻坑合并成湖的问题,最终输出湖的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考(43条消息) SCAU 18233 万湖之国的形成_小白蹦蹦跳跳的博客-优快云博客 

 

Description

N国原是一块平原上,没有湖,直到一颗小行星撞入大气层碎成成千上万的碎片,碎片再撞击地面形成
一个一个的坑, 下雨之后,最终形成万湖之国。
现在科学家想用计算机模拟万湖之国形成过程,假设每一块碎片撞击地面,都撞出一个园形坑,现在知道
每一个碎片造成的坑的圆心和半径,问每个坑都注满水后,最终形成多少个湖?



 

输入格式

第一行一个整数N,1<=N<=100,000,表示坑的数量
此后N行,每一行三个double实数,前两个数是圆心的坐标x和y,最后一个数是圆半径(不大于1000)
(数据随机产生,分布均匀)


 

输出格式

湖的个数


 

输入样例

3
0 0 5
10 0 5
11.1 0 2.5


 

输出样例

2

 

#include<iostream>
#include<algorithm>

using namespace std;
int pre[100005];
struct Circle{
	double x,y,r;
}circle[100005]; 
bool cmp(Circle a,Circle b){
	return a.x+a.r<b.x+b.r;
}
int Find(int x){
	if(pre[x]==x){
		return x;
	}else{
		return pre[x]=Find(pre[x]);
	}
}
int main(){
	int n;
	cin>>n;
	int num=n;
	for(int i=0;i<n;++i){
		cin>>circle[i].x>>circle[i].y>>circle[i].r;
		pre[i]=i;
	}
	sort(circle,circle+n,cmp);
	for(int i=0;i<n;++i){
		for(int j=i-1;j>=0;--j){
			if(circle[j].x+circle[j].r<=circle[i].x-circle[i].r){
				break;
			}else if((circle[i].x-circle[j].x)*(circle[i].x-circle[j].x)+(circle[i].y-circle[j].y)*(circle[i].y-circle[j].y)<(circle[i].r+circle[j].r)*(circle[i].r+circle[j].r)){
				int a,b;
				a=Find(i);
				b=Find(j);
				if(a!=b){
					num--;
					pre[a]=b;
				}
			}
		}
	}
	cout<<num;
	return 0;
}

下载Memrise并学习墨西哥西班牙语,西班牙语,法语,德语,日语(汉字),意大利语,韩语,中文,葡萄牙语,俄语,阿拉伯语,荷兰语,瑞典语,挪威语,波兰语,土耳其语,丹麦语甚至英语。 加入超过4,500人。玩得开心。学习您最喜欢的语言,并通过所取得的成就给自己留下深刻的印象。让真正的母语人士通过我们的“与当地人一起学习”视频剪辑,从家乡的街道上教您他们的语言。 试试看-您的第一堂课就在家里。 这就是我们与众不同的原因: 我们拥有幕后杀手学习科学。它可以加快您的学习速度,并帮助您记住新单词,就好像您的大脑一直在按“保存”按钮一样。并非您会注意到。您太忙于观看有趣的视频剪辑,在遗愿清单目的地中看到真实的当地人以及玩一些小测验游戏。教科书学习的反面。无论您在哪里忆念,都距教室一百英里。 然后好事发生了。您目前正在当地人要交谈。你冻结了吗?不,不在我们的手表上。您会回想起所学的关键词。你说话自然。虽然不完美,但仍然是很好的玩笑。你不用担心 你只是去做。您充满自信。你做到了。 麦克风掉落。 将Memrise下载至: –与当地人一起学习:我们邀请了真正的母语使用者,并将他们缩小到应用程序中。您的微型朋友可以帮助您学习有趣的会话短语。还有一些发誓的词。 –练习游戏:我们的科学在您的头脑中进行一对一的指导,同时您可以享受速度复习,听力技巧,难听的单词和经典复习的乐趣。 –提高您的发音:因此,当您说“ beaucoup”(很多)时,您永远不会意外地说出“ beau cul”(漂亮的屁股)。记录一下自己,我们的智能技术会告诉您是否正确或需要再次尝试。 –随处学习:下载您的课程,在没有信号,似乎陷于80年代的地方学习。 –养成一种娱乐习惯:根据需要学习或多或少学习。您每天只需要5分钟即可改善。非常适合使您的厕所休息更有趣。 Memrise,最佳语言学习应用程序,适用于:墨西哥西班牙语,西班牙语,法语,德语,日语(汉字),意大利语,韩语,中文,葡萄牙语,俄语,阿拉伯语,荷兰语,瑞典语,挪威语,波兰语,土耳其语,丹麦语甚至英语。 ———————– 请注意: 您需要Memrise订阅才能访问所有课程和功能。但是可用的课程和功能因设备的语言而异。 购买后,除非在当前付款期结束之前取消订阅,否则订阅将自动续订。您可以在您的Google Play商店帐户中管理或取消订阅。 ———————– 应用内权限–要启用Memrise应用的某些功能,我们可能需要征求您的许可。例如,如果您想练习发音技巧,我们会要求您使用麦克风。您可以随时在设置中更改权限。 Memrise:适用于想要学习墨西哥西班牙语,法语,德语,日语(汉字),意大利语,韩语,中文,葡萄牙语,俄语,阿拉伯语,荷兰语,瑞典语,挪威语,波兰语,土耳其语,丹麦语甚至英语的语言学习者。 MOD 独立的Android程序包; 重新打包了Android App Bundle(由KirIif'拆分了APKs Packer v4.3.2): •支持的CPU架构:armeabi-v7a,arm64-v8a,x86; •支持的屏幕DPI:lhdpi [120dpi],hdpi [240dpi],xhdpi [320dpi],xxhdpi [480dpi],xxxhdpi [640dpi]; •语言:多国语言; 高级订阅已解锁; 禁用/删除不需要的权限+接收者和服务; Analytics(分析)/ Crashlytics(崩溃)已禁用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值