谨以此题来纪念我爆炸的NOIp2017


这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分。今天无意看到这道题,终于AC

  • 首先这道题要考虑一下精度问题,虽然出题人没有毒瘤的卡精度,但还是要值得注意。解决方法也很简单,去除开方运算,而是将半径平方,即\(2r\) ---> \(4r^2\),这样就OK了。不过要记得用\(\rm long\;long\),不然会爆\(\rm int\)

  • 然后考虑如何搜索,我是将每组数据用前向星存成图,然后搜这张图。这道题有一个很特别的地方,那就是它不用回溯,因为如果一个点到不了终点,那再次搜到的话也还是到不了终点,所以我们为什么要将它再搜一遍呢?直接丢掉就好了

上代码

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
inline int read() //快读
{int k=0,f=1;char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-')f=-1;for(;isdigit(c);c=getchar())k=k*10+c-48;return k*f;
}
struct zzz{  //存空洞的坐标 ll x,y,z;
}che[1001];
inline ll f(zzz x,zzz y)  //计算空洞距离
{return (x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y)+(x.z-y.z)*(x.z-y.z);
}
struct hhh{  //存图 int f,t,nex;
}e[2000001];  int head[1001]; int tot;
inline void add(int x,int y)  //前向星
{e[++tot].f=x;e[tot].t=y;e[tot].nex=head[x];head[x]=tot;
}
int s[1001],flag; bool en[1001],vis[1001];
//s:可以当作起点的空洞  flag:可以当作起点的空洞的个数  en:终点空洞  vis:这个点是否走过
bool ans;  //判断能否到达上表面
void dfs(int str)  //搜索主体
{if(en[str])  //找到终点就不用搜了 {ans=1;  return ;}for(int i=head[str];i;i=e[i].nex)  //向下寻找能搜的点 if(!vis[e[i].t]){vis[e[i].t]=1;  //直接标志为搜过,不再回溯 dfs(e[i].t);  //向下搜索 if(ans)return ;}
}
int main()
{int t; t=read();int n; ll h,r;while(t--){tot=0; memset(head,0,sizeof(head)); ans=0;flag=0; memset(en,0,sizeof(en)); memset(vis,0,sizeof(vis)); //清空所有变量 n=read(),h=read(),r=read();for(int i=1;i<=n;i++)  //输入数据 + 处理成图 {che[i].x=read(),che[i].y=read(),che[i].z=read();if(che[i].z<=r) //如果z>=半径,那么这个空洞和下表面接触,将它加入起点 s[++flag]=i;if(che[i].z>=h-r) //同理,如果z>=h-r,那它和上表面接触,将它加入终点 en[i]=1;for(int j=1;j<i;j++)if(f(che[i],che[j])<=4*r*r) //防止精度损失 {add(i,j);  add(j,i);}}// 搜索 + 输出 bool jjj=0;for(int i=1;i<=flag;i++){dfs(s[i]);if(ans){printf("Yes\n");jjj=1;break;}}if(!jjj)printf("No\n");}return 0;
}
  • 打个广告吧

 在下的洛谷博客和博客园博客

转载于:https://www.cnblogs.com/wxl-Ezio/p/8876676.html

洛谷 P3958 奶酪相关推荐

  1. 『题解』洛谷P3958 奶酪

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

  2. 洛谷P1433 吃奶酪--Java解法(货郎担问题)

    洛谷P1433 吃奶酪–Java解法(货郎担问题) 题目链接 解决思想 本题目是一个典型的货郎担问题,即从(0,0)点出发,所有点仅经过依次(我们可以用反证法证明如果有一个点经过两次其路径一定比每个点 ...

  3. 洛谷 P1433 吃奶酪 dfs剪枝

    洛谷 P1433 吃奶酪 dfs剪枝 题解: dfs+剪枝,不过现在好像被卡时间了,第10个点过不了.. 代码如下: #include<iostream> #include<algo ...

  4. 洛谷 P1433 吃奶酪

    这一题用到了状态压缩.然后接下来可以用 dp 或 dfs. 一开始我用的是 dp,不会,然后看题解,dp 写完感觉脑子糊糊的,于是打算写写 dfs. dfs 优化后还是 WA 了一个点,然后又跑去看大 ...

  5. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

  6. 洛谷 P2570 [ZJOI2010]贪吃的老鼠

    洛谷 P2570 [ZJOI2010]贪吃的老鼠 题目 题目描述 奶酪店里最近出现了m只老鼠!它们的目标就是把生产出来的所有奶酪都吃掉.奶酪店中一天会生产n块奶酪,其中第i块的大小为pi,会在第ri秒 ...

  7. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  8. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  9. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

最新文章

  1. CVPR 2021 | pixelNeRF:一种基于NeRF的多视图三维重建网络
  2. shell启动java_一个通用的java Application启动shell脚本
  3. 量子计算机到底神在哪里说明文,“九章”量子计算机到底有多神!
  4. c++ Boost库之boost::bind学习
  5. C指针原理(38)-C快速入门
  6. PowerVR 7架构解析
  7. 矩池云上使用Visdom可视化图像说明
  8. BZOJ2049[SDOI2008] 洞穴勘测
  9. 量子化学计算机理,量子化学计算在反应机理确证中的应用
  10. 大数据智能算法及测评技术(二)
  11. 北京工作居住证与北京居住证的区别
  12. Placing Lampposts
  13. 水泥caement英语
  14. 2018年广东工业大学文远知行杯新生程序设计竞赛 1012 只有我不在的世界β
  15. 数码相框(四、使用freetype库实现矢量字体显示)
  16. PetShop的系统架构设计(转Bruce Zhang(wayfarer) )
  17. C. Chocolate Bunny(思维)
  18. 嵌入式测试大赛预选赛
  19. 再练动态规划——(2)自然数拆分Lunatic版
  20. pkpm快速入门教程_PKPM教程入门必知技巧

热门文章

  1. 【链表】剑指offer:从尾到头打印链表
  2. akamai:与看视频广告等待相比,用户更不能忍受缓冲等待
  3. php post不完整,如何在PHP中检查不完整的POST请求
  4. pandas 设置多重索引_pandas dataframe多重索引常用操作
  5. linux声明语言变量,C语言中用extern声明外部变量
  6. linux如何杀死ping进程,linux下ping命令使用详解
  7. pip安装包报错Could not find a version that satisfies the requirement pymysql (from versions: none)
  8. 【CSP201312-2】ISBN号码,字符串,简单模拟
  9. 【编辑器】用CodeRunner打造VScode的C++开发环境
  10. java浮点运算很难_关于Java:浮点运算不能产生精确结果