传送

今天早晨,神志不清的我决定拿头过这道题

终于在wa了6次之后过了

emm  明明都是一些细节自己却注意不到啊啊啊不能再颓了!!!!!!!!!!!!

好了回归正题

首先我们要开long long

其次我们来说一说思路

大佬xcg讲了两种做法

一.搜索

不好想不好写,比第二种算法快

洛谷标签说是广搜,但这个题深搜会比广搜快,因为这里是判断有没有解,而不是让你求最短路

如果要求最短路怎么办?拿头过三维迪杰斯特拉我也不知道

所以我们不讨论怎么求最短路(没有杠精)

我们怎么搜呢?

当然是从下表面开始了(当然也可以从上表面开始,看能否通到下表面,更可以看上下表面哪个洞少就从那个开始搜)

在搜索过程中,就不断找到与当前点相通的点。同时又因为只是判断有没有解,所以只要找到解,就可以直接返回,然后让上一层的程序也返回。这可以用一个标记做到。

问题来了,怎么判断两个洞是否相通?

我们计算两个洞的球心的距离,如果它<=2*r,则证明这两个洞相交或者相切(我也不知道jerry是怎么在相切的时候穿过这一个接触的点的),当等于时,是相切。否则,就不相通。

与底部相通:判断洞的球心的高度-r是否<=0(不是<=h)(我也不知道手残打出来的为什么还有30分)

与顶部相通:球心高度+r>=h

拿头硬过的代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read()
{
char ch=getchar();
ll x=;bool f=;
while(ch<''||ch>'')
{
if(ch=='-')f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return f?-x:x;
}
ll t,n,h,r;
bool bj,vis[];
struct qiu{
ll x,y,z;
}p[];
bool cmp(qiu a,qiu b)//一个优化退化:按照所有球心的高度进行排序,如果从某个球开始就不与底部相通,则后面的球都不会与底部相通(据lz实测会慢emmmm)
{
return a.z<b.z;
}
double jl(qiu a,qiu b)
{
return sqrt((double)((a.x-b.x)*(a.x-b.x))+(double)((a.y-b.y)*(a.y-b.y))+(double)(a.z-b.z)*(a.z-b.z));
}
void dfs(ll k)
{
if(p[k].z+r>=h)
{
bj=;//bj标记有解
return;
}
for(int i=;i<=n;i++)
{
if(bj)return;//若有解则不继续搜索
if(jl(p[k],p[i])<=2.0*r&&!vis[i])
{
vis[i]=;
dfs(i);
}
}
}
int main()
{ t=read();
for(ll i=;i<=t;i++)
{
memset(vis,,sizeof(vis));
bj=;
n=read();h=read();r=read();
for(ll j=;j<=n;j++)
p[j].x=read(),p[j].y=read(),p[j].z=read();
sort(p+,p++n,cmp);
for(int j=;j<=n;j++)
{
if(bj)break;
if(p[j].z-r<=)//可别手残了
{
vis[j]=;
dfs(j);
}
else break;
}
if(!bj)printf("No\n");
else printf("Yes\n");
}
}

P3928奶酪的更多相关文章

  1. 【luogu】 P1433 吃奶酪

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块奶酪的坐标. ...

  2. 洛谷 P1433 吃奶酪 Label:dfs && 剪枝Ex

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  3. 1740: [Usaco2005 mar]Yogurt factory 奶酪工厂

    1740: [Usaco2005 mar]Yogurt factory 奶酪工厂 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 119  Solved:  ...

  4. 吃奶酪 洛谷 p1433

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  5. 【dfs】P1433 吃奶酪

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  6. P3958 奶酪

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

  7. P1433 吃奶酪 回溯法 优化

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  8. 洛谷 P1433 吃奶酪【DFS】+剪枝

    题目链接:https://www.luogu.org/problemnew/show/P1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处 ...

  9. noip2017奶酪

    题目描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0,奶酪的上 ...

随机推荐

  1. Tarjan水题系列(1):草鉴定Grass Cownoisseur [USACO15JAN]or[luogu P3119]

    题目如下: 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从1号草场出发,最后回到1号草场.她想经过尽可能多的草场,贝 ...

  2. mysql分组统计后将结果顺序排列(union实现)

    工作中用到统计12月份通话记录,统计号码拨打次数,但是问题出在一个号码可以拨打多次,每次可能接通也可能不接通,如果用主叫号码caller字段group by分组后count(*)统计数目,这样会导致不 ...

  3. Node.js+koa2

    const Koa = require('koa') const app = new Koa() const bodyParser = require('koa-bodyparser') app.us ...

  4. A广搜

    <span style="color:#330099;">/* A - 广搜 基础 Time Limit:2000MS Memory Limit:65536KB 64b ...

  5. webpack 中如何使用 vue

    1. 安装vue的包: cnpm i vue -S 2. 由于 在 webpack 中,推荐使用 .vue 这个组件模板文件定义组件,所以,需要安装 能解析这种文件的 loader cnpm i vu ...

  6. Jenkins用户授予root权限

    Jenkins用户授予root权限   由于需要在jenkins中执行shell脚本,但是有些目录下没有权限,下面的操作为jenkins用户授予root权限.   jenkins用户加入到root组 ...

  7. Tomcat报java.io.IOException: Broken pipe错误

    Tomcat报java.io.IOException: Broken pipe错误,如下图: 解决方案:我的原因是因为网络策略导致出现该问题,即网络端口未启用或被限制.

  8. Listview四种视图VIEW

    http://wenku.baidu.com/link?url=65Ac8WL6j8KZwDlN8LyoxqFF5Jynvg80LnKc4jqTPQTY-59wwRDKhqGySYwxf6gZ9_6T ...

  9. MUI使用h5+进行召唤各大APP应用市场调用启动的包名和方式

    转载自:https://blog.csdn.net/u012442504/article/details/87367153 // 扩展API加载完毕后调用onPlusReady回调函数 documen ...

  10. linux find 用法和常见用例

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 本人qq群也有许多 ...