博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4214 Crash and Go(relians)
阅读量:6433 次
发布时间:2019-06-23

本文共 1154 字,大约阅读时间需要 3 分钟。

/*hdu 4214 Crash and Go(relians)题意:伞兵降落到一个星球上,每个人带着一个电台,只要任何一方进入另一方的覆盖范围,双方就可以沟通练习到所有可以联系的战友,他们会在一个点()回合,用他们的电台合成一个功率更大的电台,新电台的覆盖面积是那些的和一直这样合并下去,问最后剩下几个电台所给数据的顺序就是伞兵落地的顺序,只有落地后才能打开电台*/#include
#include
#include
#include
using namespace std;struct node//描述一个电台 的坐标和 覆盖半径{ double a,b,r;};int he(node &nod,list
&ll){ int flag=0;//可合并的个数 double a=0,b=0,rr=0; list
::iterator it; it=ll.begin(); while(it!=ll.end()) { double ma=it->a,mb=it->b,mr=it->r; double dist=sqrt((nod.a-ma)*(nod.a-ma)+(nod.b-mb)*(nod.b-mb)); if(dist>mr&&dist>nod.r)//任何一方都未进入另一方的覆盖范围 { it++; continue; }else { a+=ma;//收集可合并的信息 b+=mb; rr+=mr*mr; flag++; it=ll.erase(it);//删除这个电台 } } if(flag)//若可合并 { flag++; a+=nod.a; b+=nod.b; rr+=nod.r*nod.r; a=a/flag; b=b/flag; rr=sqrt(rr); nod.a=a;//合并成新的电台 nod.b=b; nod.r=rr; return 1; }else { return 0;//否则返回0,表示不能合并 }}int main(){ int n,i; double a,b,rr; while(cin>>n,n) { list
ll; node nod; for(i=1;i<=n;++i) { int flag=0; a=b=rr=0; cin>>nod.a>>nod.b>>nod.r;//读入一个电台(士兵)的信息 while(he(nod,ll))//尝试与其他的电台合并,若合并成功,拿新的电台再次尝试 ;//这儿什么都不做 ll.push_back(nod);//把这个电台放到这里边 } cout<
<

转载地址:http://votga.baihongyu.com/

你可能感兴趣的文章
自定义控件(二) 从源码分析事件分发机制
查看>>
CVE-2014-4113漏洞利用过程分析
查看>>
解密MSSQL链接数据库的密码
查看>>
Glide-源码详解
查看>>
你敢在post和get上刁难我,就别怪我装逼了
查看>>
直播 3.0 时代,在线教育行业的裂变和重构
查看>>
SpringBoot使用Nacos服务发现
查看>>
2017双11技术揭秘—阿里巴巴数据库技术架构演进
查看>>
我的友情链接
查看>>
Spring框架 - AOP使用
查看>>
Ansible常用内置属性
查看>>
C#使用正则表达式校验邮箱
查看>>
Linux自动清理N天前目录文件
查看>>
方便 快捷 安全的EVO邮件服务器
查看>>
bash的快捷键
查看>>
关于如何编写linux设备驱动
查看>>
DNS服务
查看>>
九州云开放“边缘云”能力 助力中国联通延展业务边界
查看>>
Linux进程状态(ps stat)之R、S、D、T、Z、X
查看>>
ME3750和普通3750的区别
查看>>