NOIP2017 D2T1 奶酪
超级水的并没有用什么几何知识的几何题……
直接爆搜一遍最后判断有没有与上/下表面相连的球之间连通即可……O(n2)不动脑子的复杂度
最多只是用一下并查集来判断两个点是否连通……
具体细节不必赘述代码如下(超简洁只有51行)
#include<cstdio>
#include<cmath>
using namespace std;
struct ball
{
long long x,y,z;//开成long long防止运算溢出
}balls[];//存储球心信息
int up[],down[],tot1,tot2;//和上表面/下表面接触的球的球心编号及数组的大小标记
int fa[];//并查集组件
int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);}//寻找父亲
double dis(ball i,ball j){return sqrt((i.x-j.x)*(i.x-j.x)+(i.y-j.y)*(i.y-j.y)+(i.z-j.z)*(i.z-j.z));}//求球心矩
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
for(int i=;i<=;i++)
fa[i]=i;//初始化fa数组
tot1=tot2=;
int n,h,r;
scanf("%d%d%d",&n,&h,&r);
for(int i=;i<=n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
balls[i].x=x;balls[i].y=y;balls[i].z=z;
if(z+r>=h)//球与上表面相交
up[++tot1]=i;
if(z-r<=)//球与下表面相交
down[++tot2]=i;
}
for(int i=;i<=n;i++)//判断任意两个球是否相交
for(int j=i+;j<=n;j++)
if(dis(balls[i],balls[j])<=*r)
fa[getfa(i)]=getfa(j);//若相交,合并
bool ans=false;
for(int i=;i<=tot1;i++)
for(int j=;j<=tot2;j++)
if(getfa(up[i])==getfa(down[j]))//如果从上面与下面相通,则为真
{
ans=true;
break;
}
if(ans)
printf("Yes\n");
else
printf("No\n");
}
return ;
}
我只想提醒一点……判断球是否与上下表面相邻(读入处理的地方)一定一定不要加else!因为一个球可能同时与上下表面相连!我随手加个else30分就没有了………………
NOIP2017 D2T1 奶酪的更多相关文章
- [Luogu 3958] NOIP2017 D2T1 奶酪
题目链接 人生第一篇题解,多多关照吧. 注意事项: 1.多组数据,每次要先初始化. 2.因为涉及到开根,所以记得开double. 整体思路: 建图,判断「起点」与「终点」是否连通. 方法可选择搜索(我 ...
- NOIP2017 D2T1奶酪
这题终于是正经第一题感觉了. 只需要对相交或相切的球建一条边,然后对所有与底面有交点的球连边,再对所有与顶面有交点的球连边,bfs判断上下连通性即可. #include<iostream> ...
- NOIP 2017 D2T1 奶酪
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #i ...
- luogu 3958 奶酪
noip2017 D2T1 奶酪 某zz选手没有想到可以用并查集来做,直接用了dijskstra,结果被ccf老爷机卡成了70分 题目大意: 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为 ...
- noip2017部分题目
D1T3 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张NN个点MM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,NN号点是公园的出口,每条边有一个非负权值, 代表策策经过 ...
- NOIP2017 题解
QAQ--由于没报上名并没能亲自去,自己切一切题聊以慰藉吧-- 可能等到省选的时候我就没有能力再不看题解自己切省选题了--辣鸡HZ毁我青春 D1T1 小凯的疑惑 地球人都会做,懒得写题解了-- D1T ...
- [NOIP补坑计划]NOIP2017 题解&做题心得
终于做完了…… 场上预计得分:?(省一分数线:295) 由于看过部分题解所以没有预计得分qwq 题解: D1T1 小凯的疑惑 题面 震惊!一道小学奥数题竟难倒无数高中考生! 欢迎大家以各种姿势*和谐* ...
- NOIP 考前研究
NOIP 2017 试题研究 D1T1 小凯的疑惑 (45 min) 看到题面,大概是推数学公式. 先打暴力表,观察 \(a,b\) 与 \(n\) 的关系.猜想 \(a×b−a−b\). 引理:对于 ...
- NOIp2017TG解题报告
NOIp2018RP++! 虽然没去但还得写写QAQ D1T1 : 小凯的疑惑 数学题 手推几组数据然后发现规律 \(Ans = (a-1)(b-1)+1\) AC in 1minite D1T2 : ...
随机推荐
- rename()函数(包含更改索引列列名的方法)
1 rename()可以更换列名和行名,必须写上columns或index,否则无效 import pandas as pd df = pd.DataFrame({'a':[1,2], 'b':[3, ...
- visual studio 的 code snippet(代码片段)
visual studio自带代码片段,用了6年visual studio才知道有这么个玩意……惭愧 最简单例子 for循环,for,连点两下tab……自己研究吧
- Matlab——表达式 阵列与矩阵的创建
表达式 指令过长: 如果一个指令过长可以在结尾加上... 下一行继续写指令即可 若不想每次都显示运算结果,只需在运算式最後加上分号(:)即可 注释 基本的算术运算有: 加 (+).减 (-).乘 (* ...
- 书籍:wpf学习书籍介绍
WPF参考书推荐 下面先整理下,本人主要学习的WPF参考书: 1.WPF编程宝典(C#2010) 该书:(必读) 心得体会:读完该书后,你对WPF的基础和基本控件的使用,包括WPF的编程模型,相比Wi ...
- linux 正则表达式 元字符
\b 单词边界 \bcool\b 只匹配cool字符串 [root@MongoDB ~]# cat test.txt i am mike1 i am mike i am mike12 匹配有mike ...
- adb 连接 mumu 模拟器
[win版]adb connect 127.0.0.1:7555adb shell [mac版] adb kill-server && adb server && ad ...
- [转帖]是时候深入了解Linux的系统结构
是时候深入了解Linux的系统结构 http://os.51cto.com/art/201905/596011.htm linux的体系结果 其实自己也知道 linus 做了一个 kernel 大 ...
- Mybatis-学习笔记(3)mapper配置文件
1.mapper配置文件常用的元素 parameterMap已经废弃,老式风格的参数映射. 2.select元素 映射查询语句.#{...}用于预处理语句参数,通过JDBC,这样一个参数在SQL中会由 ...
- linux之网卡绑定
1 什么是网卡绑定 将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡.直接给两块网卡设置同一IP地址是不可以的.通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的 ...
- linux的进程间通信概述
一 进程间通信 1.1. linux内核提供多种进程间通信机制 a. 无名管道和有名管道 b. SystemV IPC:信号量.消息队列.共享内存 c. Socket域套接字 d. 信号 1.2. 无 ...