这个题是2017noip提高组的真题,是一个深度搜索题,得分轨迹:10-80-100pts。

在三维空间里,存在可能连通的洞(半径r),问是否可以通过这些洞从底部到达顶部。一开始我联想到了01迷宫,以联通块的方式求解,但发现不可。于是就单纯想用一个一维的dfs去枚举,发现这个dfs的时间复杂度很低,似乎每一个节点访问一遍即可。首先确定了每次要枚举的是当前的坐标,如果z+r>=h则flag=true,如果没有就for(1~n),打上标记,但在这里,每一个点只需要走一次就可以了,因为从2-4如果到不了,那么从3-4也到不了,所以不用回溯。但是需要有一个入口,那么要把dfs放到一个for里,如果z<=r,那么进去。但是对于数据类型的定义我出现了问题,请教了lz,hhs,lxy大佬。

1.要想骗到分或者代码写崩了,仔细看数据范围,比如这个题n=1,直接判断能不能到达底部和顶部就20分了。

2.多组数据输出时别忘了换行。

3.计算公式的正确性一定要保证,调试的时候心态放平,按部就班,应该可以找出来的。

4.对于数据的类型定义,sqrt要double,平方要long long这些都要想清楚

代码

 #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct node{
double x;
double y;
double z;
}a[];
int book[];
int T;
int n,h;
long long r;
bool flag=false;
long long d;
long long dis(double x,double y,double z,double xx,double yy,double zz){
return ((x-xx)*(x-xx)+(y-yy)*(y-yy)+(z-zz)*(z-zz));
// return ((x-xx)^2+(y-yy)^2+(z-zz)^2);
}
void dfs(double x,double y,double z){
if(z+r>=h){
flag=true;
return;
}
if(flag==false){
for(int i=;i<=n;i++){
if(book[i]==){
//cout<<dis(x,y,z,a[i].x,a[i].y,a[i].z);
if(dis(x,y,z,a[i].x,a[i].y,a[i].z)<=r*r*){//相交或相切
book[i]=;
dfs(a[i].x,a[i].y,a[i].z);
//cout<<i<<endl;
}
}
else continue;
}
}
}
int main(){
scanf("%d",&T);
for(int i=;i<=T;i++){
flag=false;
cin>>n>>h>>r;
for(int i=;i<=n;i++){
cin>>a[i].x>>a[i].y>>a[i].z;
book[i]=;
}
for(int i=;i<=n;i++){
if(flag==true) break;
if(a[i].z<=r){
// cout<<i<<endl;
book[i]=;
dfs(a[i].x,a[i].y,a[i].z);
}
}
if(flag==true) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return ;
}

P3958奶酪的更多相关文章

  1. 洛谷 P3958 奶酪 并查集

    目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...

  2. P3958 奶酪

    传送门 思路: 模拟题.用并查集求出所有 “连通块” ,判断是否有 “连通块” 的最顶上和最下方都不小于奶酪的范围. Code: #include<iostream> #include&l ...

  3. 洛谷P3958 奶酪

    题目链接 这道题貌似可以用BFS来写吧qwq. 我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可. 但是需要注意的是还有这样的一种情况:有一个大洞贯 ...

  4. 『题解』洛谷P3958 奶酪

    Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 现有一块大奶酪,它的高度为\(h\),它的长度和宽度我们可以认为是无 ...

  5. 洛谷 P3958 奶酪

    谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...

  6. 洛谷P3958 奶酪 并查集

    两个空洞可互达当且仅当两个空洞相切,即球心距离小于等于球的直径. 一一枚举两个可互达的空洞,并用并查集连起来即可. Code: #include<cstdio> #include<c ...

  7. 洛谷 P3958 奶酪 题解

    思路: 先看哪两个点能互通,再广搜寻找下一步,如果到达高度h就输出Yes,如果所有路径都找过都不能到达高度h就输出No. #include<bits/stdc++.h> using nam ...

  8. 历年NOIP题

    做了几天远古老题,发现不可做,于是咕掉..转而从2005开始.. 1997: P1549 棋盘问题(2):搜索,优化搜索顺序,对于第一行第一列先搜小的(但是其实这样是错的,仅仅能过原题) 加强版咕. ...

  9. 浅谈并查集&种类并查集&带权并查集

    并查集&种类并查集&带权并查集 前言: 因为是学习记录,所以知识讲解+例题推荐+练习题解都是放在一起的qvq 目录 并查集基础知识 并查集基础题目 种类并查集知识 种类并查集题目 并查 ...

随机推荐

  1. python 脚本制作

    U盘拷贝 当U盘插入主机时 被系统识别挂载后 通过python代码自动的去读取U盘中的资料并且进行拷贝 寄存在U盘上的 把硬盘上的资料进行读取并移动到U盘里 有点像 繁殖性 传输性 破坏性 破坏系统或 ...

  2. [SpringBoot] 通过spring.factory文件来加载第三方的bean

        在springboot的开发过程中,我们经常需要加载一些bean,如果bean使我们自己写的类,那很好办,加个@Component注解就搞定了,然后过程启动会扫描启动类所在的包及其子包,如果我 ...

  3. 40 final、finally、finalize的区别

    1.final 用于声明属性.方法.类.分别表示属性不可被改变,方法不可被覆盖,类不可被继承. (1)一个类不能既被声明为abstract的,又被声明为final的. (2)被声明为final的变量必 ...

  4. docker-compose命令及yaml文件

    Docker-compose常用命令 docker-compose up -d nginx 构建建启动nignx容器 docker-compose exec nginx bash 登录到nginx容器 ...

  5. python build-in function

    目录(?)[-] absx alliterable anyiterable basestring binx boolx callableobject chri classmethodfunction ...

  6. 一个超详细vue无限滚动vue-infinite-scroll插件的配置及使用详解

    开发中总会遇到这种下拉加载的设计方案,Vue实现下拉加载最佳方案自然是使用vue-infinite-scroll来实现.接下来我们一起看下它的配置及使用方式. 首先我们先了解下他的配置参数: v-in ...

  7. React 项目 ant design 的 CheckboxGroup 验证

    使用 ant design 提供的 getFieldDecorator 进行验证 一般开始使用默认选中 <FormItem> {getFieldDecorator('checkProtoc ...

  8. Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结

    之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...

  9. Mybatis学习笔记之---多表查询(2)

    Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...

  10. [LeetCode]-DataBase-Combine Two Tables

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...