这个题是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. JAVA笔记19-容器之三 Set接口、List接口、Collections类、Comparable接口(重要)

    一.Set接口 //HashSet综合举例 import java.util.*; public class Test{ public static void main(String[] args){ ...

  2. 为什么要重写hashcode( )和equals( )?

    打个比方,一个名叫张三的人去住酒店,在前台登记完名字就去了99层100号房间,此时警察来前台找叫张三的这个人住在哪间房,经过查询,该酒店住宿的有50个叫张三的,需要遍历查询,查询起来很不方便. 那么就 ...

  3. 实战build-react(一)

    https://www.jianshu.com/p/34468f13263c(copy)  目录结构 一.安装 npm install -g create-react-app 二.创建react应用 ...

  4. luoguP1197 [JSOI2008]星球大战 x

    P1197 [JSOI2008]星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中 ...

  5. OI多项式 简单学习笔记

    咕咕咕 先开个坑(其实是存模板来了) 一些特别简单的前置东西qwq 复数的计算 复数相加:向量相加,复数相乘.复数相乘:模长相乘,旋转量相加(就是复平面坐标轴逆时针旋转的角度) (当然也可以直接使用c ...

  6. Kubernetes Deployment故障排除图解指南

     个人K8s还在学习中,相关博客还没有写,准备学第二遍再开始学,发现这篇文章挺好,先转载一下. 原创: 白明的赞赏账户 下面是一个示意图,可帮助你调试Kubernetes Deployment(你可以 ...

  7. 关于Fibonacci博弈的一些学习

    关于Fibonacci博弈的一些学习 一道例题 问题 给定n(n≥2)个石头,游戏双方轮流取至少一个石子,取到最后一个石子的人算赢,但是要满足一下规则: 第一次取不能全部取完所有的石子. 设前一次取的 ...

  8. 人工智能之基于Opencv与深度学习的计算机视觉实战课程

    https://www.bilibili.com/video/av66375362 imagewatch:https://blog.csdn.net/iracer/article/details/83 ...

  9. vue-cli 构建的 Vue 项目用 localhost 加 端口 能访问,但是切换到 ip 加 端口 就不能访问

    问题出在 webpack 的配置 在 config 文件夹下, 找到 index.js 目录, 找到如下代码 host: 'localhost', // can be overwritten by p ...

  10. Python黑科技:6行代码轻松搭建FTP服务器

    Python 黑科技 六行代码轻松搭建个人FTP服务器 什么是FTP服务器? FTP (File Transfer Protocol) 是一个用于客户端与服务器之间文件的协议.利用FTP我们就能做到在 ...