Luogu P3958 奶酪

#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
double h,r;
struct Cheese{
  double x,y,z;
    //重载运算符
  bool operator<(const Cheese &cpr) const{
    return z<cpr.z;
  }
}C[1010];
bool flag=0;
bool vis[1010];
void dfs(int now){
  //cout<<"now="<<now<<" C.x="<<C[now].z<<endl;
  if(h-C[now].z<=r){
    flag=1;
    return;
  }
  vis[now]=1;
  for(int i=1;i<=n;i++){
    if(!vis[i]){
      double dist=sqrt((C[now].x-C[i].x)*(C[now].x-C[i].x)+(C[now].y-C[i].y)*(C[now].y-C[i].y)+(C[now].z-C[i].z)*(C[now].z-C[i].z));
      if(dist<=2*r) dfs(i);

    }
  }
}
int main(){
  int T;
  cin>>T;
  while(T--){
    memset(vis,0,sizeof(vis));
    memset(C,0,sizeof(C));
    flag=0;
    cin>>n>>h>>r;
    for(int i=1;i<=n;i++) cin>>C[i].x>>C[i].y>>C[i].z;
    sort(C+1,C+n+1);
    for(int i=1;i<=n;i++){
      if(C[i].z-r<=0)dfs(i);
    }
    if(flag)puts("Yes");
    else puts("No");
  }
  return 0;

}

原文地址:https://www.cnblogs.com/KingBenQi/p/12301825.html

时间: 2024-10-31 10:40:16

Luogu P3958 奶酪的相关文章

洛谷P3958 奶酪

题目:https://www.luogu.org/problemnew/show/3958 题目描述 现有一块大奶酪,它的高度为 hh,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0,奶酪的上表面为z=h. 现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐 标.如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别 地,如果一个空洞与下表面

P3958 奶酪

题目描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0,奶酪的上表面为z=h. 现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐 标.如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞:如果 一个空洞与上表面相切或是相交,Jer

2019/9/27 题解:【P3958】 奶酪

题解:[P3958]  奶酪 题目: 传送门:https://www.luogu.org/problem/P3958 AC代码:DFS 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 using namespace std; 7 int n,outfg,cnt,anst; 8 double h

[Luogu 3958] NOIP2017 D2T1 奶酪

NOIP2017 D2T1 奶酪(Luogu 3958) 人生第一篇题解,多多关照吧. 一个比较容易想到的搜索.我用的BFS. 因为涉及到开根,所以记得开double. 首先将所有的球按z值从小到大排序,如果最下方的球与底面相离,或是最上方的球与顶面相离,直接Pass. 接下来预处理,记得先初始化,对于每一组球(i,j),计算两球球心距离是否小于半径×2,用一个bool数组e[i][j]记录i能否到达j,避免BFS时重复计算. 我们会发现,可能不止一个球与底面相切或相交,也可能不止一个球与顶面相

[Luogu] 奶酪

https://www.luogu.org/problemnew/show/P3958 连边bfs / 并查集 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; const int N = 1010; #define gc getchar() struct Node{ double x, y, z; }E[N]; i

luogu P1433 吃奶酪

原题链接:https://www.luogu.org/problem/show?pid=1433 虽然是一道思维难度不大的DFS,但是这其中比较重要的是可行性剪枝(这是本蒟蒻做的第一道剪枝) 本题的优化点有不少:预处理两点之间的距离,用邻接矩阵存储,搜索时直接调用即可. 当目前走到的距离已经超过现有的最小值,那么就无需继续搜索下去,直接返回即可. (那些register 之类的,都是因为写了个死循环TLE了以为常数问题加的...) #include<cstdio> #include<cm

解题报告:luogu P1433 吃奶酪

题目链接:P1433 吃奶酪 我感觉可以改成:[模板]TSP问题(商旅问题) 了. 爆搜\(T\)一个点,考虑状压\(dp\)(还是爆搜). 我们用\(dp[i][j]\)表示现在是\(i\)状态,站在了\(j\)点. 那什么是状态呢? 我们用一个零一串表示每一点有无被走过(\(0\)是没走过,\(1\)是已走过),那么转移方程就是: \[dp[i][j]=min(dp[i][j],dp[i\&((1<<n)-1-(1<<(j-1)))][k]+dis[j][k])\] 好

洛古——P1433 吃奶酪

https://www.luogu.org/problem/show?pid=1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块奶酪的坐标. 两点之间的距离公式=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) 输出格式: 一个数,表示要跑的最少距离,保留2位小数. 输入输出样例 输入样例#1: 4 1 1 1 -1

Luogu P2570 [ZJOI2010]贪吃的老鼠

Luogu P2570 [ZJOI2010]贪吃的老鼠 题目描述 奶酪店里最近出现了\(m\)只老鼠!它们的目标就是把生产出来的所有奶酪都吃掉.奶酪店中一天会生产\(n\)块奶酪,其中第\(i\)块的大小为\(pi\),会在第\(ri\)秒被生产出来,并且必须在第\(di\)秒之前将它吃掉.第j只老鼠吃奶酪的速度为\(sj\),因此如果它单独吃完第i快奶酪所需的时间为\(pi/sj\).老鼠们吃奶酪的习惯很独特,具体来说: (1) 在任一时刻,一只老鼠最多可以吃一块奶酪: (2) 在任一时刻,一