洛谷P3958 奶酪】的更多相关文章

谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出题人没有毒瘤的卡精度,但还是要值得注意.解决方法也很简单,去除开方运算,而是将半径平方,即\(2r\) ---> \(4r^2\),这样就OK了.不过要记得用\(\rm long\;long\),不然会爆\(\rm int\) 然后考虑如何搜索,我是将每组数据用前向星存成图,然后搜这张图.这道题有一…
目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪,它的高度为 $ h $ ,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为 $ z=0 $ ,奶酪的上表面为 $ z=h $ . 现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在…
题目链接 这道题貌似可以用BFS来写吧qwq. 我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可. 但是需要注意的是还有这样的一种情况:有一个大洞贯穿了整个奶酪所以要对n=1时进行特判. AC代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define…
Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 现有一块大奶酪,它的高度为\(h\),它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为\(z = 0\),奶酪的上表面为\(z = h\). 现在,奶酪的下表面有一只小老鼠Jerry,它知道奶酪中所有空洞的球心所在的坐 标.如果两个空洞相切或是相交,则Jerry可以从其中一个空洞跑…
两个空洞可互达当且仅当两个空洞相切,即球心距离小于等于球的直径. 一一枚举两个可互达的空洞,并用并查集连起来即可. Code: #include<cstdio> #include<cmath> using namespace std; const int maxn = 1000 + 4; int p[maxn]; int find(int x) { return p[x] == x ? x : p[x] = find(p[x]); } struct Point { double x…
思路: 先看哪两个点能互通,再广搜寻找下一步,如果到达高度h就输出Yes,如果所有路径都找过都不能到达高度h就输出No. #include<bits/stdc++.h> using namespace std; long long t; long long n,h,r; ],y[],z[]; ][]; ]; ; long long p;//用long long(数据范围大) int juli(long long a,long long b,long long c,long long d,lon…
奶酪[题目链接] 题前废话不知道说啥了啊qwq(越来越沉默寡言) 好了看题: SOLUTION: 思路的话,大概是搜索,然后大概广搜??? 但是我们今天写深搜(也是听xcg大佬讲了以后的整理博) 首先先是读入,注意因为有多组数据,所以一定要记得重新赋值例如memset. 然后我们寻找可以从奶酪下表面进去的洞,显然当一个洞的高度z-r<=0时,就可以通过了: ;i<=n;i++){ ) vis[i]=,dfs(i); } 然后我们可以尝试剪枝(然后亲测剪枝以后更慢了???) 剪枝:因为当你某一个…
问题描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z = 0,奶酪的上表面为z = h. 现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐 标.如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别 地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞:如果 一个空洞与上表面相切或是相…
题面 题解 我们考虑使用一个并查集维护空洞之间的关系. 如果两个空洞能相互到达,那么它们的祖先也是相同的. 枚举从哪一个空洞开始,能否到达奶酪的上表面. 如果能到达就输出Yes,否则输出No. 注意开long long. 代码 #include <bits/stdc++.h> #define itn int #define int long long #define gI gi using namespace std; inline int gi() { int f = 1, x = 0; c…
这道题的写法大体有两种:大法师DFS和并查集,两种算法都不难,本篇博客主要讲解DFS,而且测试数据特水,连个剪枝都不用都可以过. 题目描述[luogu传送门] 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z = 0,奶酪的上表面为z = h. 现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐 标.如果两个空洞相切或是相交,则 Jerry…