zoukankan      html  css  js  c++  java
  • 蓝桥杯 小生物的逃逸 模拟

    问题描述
      空间中有n个球,这些球不相交也不相切。有m个可以视为质点的小生物,可能在某些球内,也可能在所有球之外,但不会在球面上。问这些生物从原来的地方逃逸到所有球外面的空间,至少要经过多少层球面。
    输入格式
      第一行两个数n、m:表示球的数量和小生物的数量;
      接下来n行每行四个整数Xi、Yi、Zi和Ri:表示一个球的三维坐标和半径;
      接下来m行每行三个整数Xi、Yi、Zi:表示一个生物的坐标。
    输出格式
      一行m个数:表示每个小生物逃逸时至少经过的球面数。
    样例输入
    2 2
    0 0 0 2
    0 0 0 4
    0 0 1
    0 0 3
    样例输出
    2 1
    数据规模和约定
      1<=n、m<=100,|Xi|、|Yi|、|Zi|<=10000,1<=Ri<=10000;
      数据保证所有球严格不接触,小生物都不在球面上。
    数学公式忘记了...
    二维两点之间距离公式:
     
    三维两点之间距离公式:
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main() {
     4     int n, m;
     5     cin >> n >> m;
     6     int n_x[105], n_y[105], n_z[105], R[105];
     7     int m_x[105], m_y[105], m_z[105];
     8     for (int i = 0; i < n; i++) { //输入各个球圆心的坐标和半径 
     9         cin >> n_x[i] >> n_y [i] >> n_z[i] >> R[i];    
    10     }
    11     for (int i = 0; i < m; i++) {
    12         cin >> m_x[i] >> m_y[i] >> m_z[i]; //输入每个生物的坐标 
    13     }
    14     for (int i = 0; i < m; i++) { //枚举每个生物 
    15         int ans = 0;
    16         for (int j = 0; j < n; j++) { //枚举每个球 
    17             int x, y, z;
    18             x = abs(m_x[i] - n_x[j]);
    19             y = abs(m_y[i] - n_y[j]);
    20             z = abs(m_z[i] - n_z[j]);
    21             //计算每个生物到每个球圆心的距离来判断在不在这个球内 
    22             if (sqrt(x * x + y * y + z * z) < R[j]) { //在球内次数加一 
    23                 ans++;
    24             }
    25         }
    26         cout << ans << " ";
    27     }
    28     return 0;
    29 }
     
  • 相关阅读:
    Android Dialog
    Android中Activity和Fragment与Fragment和Fragment之前互相传值方法
    Git 常用命令
    php-tool-xhprof
    大数据
    数据库连接
    Linux架构之Nginx 负载均衡会话保持
    Linux基础之输入输出
    Linux架构之Nginx 配置文件
    Linux架构之Nginx Web基础1
  • 原文地址:https://www.cnblogs.com/fx1998/p/12614177.html
Copyright © 2011-2022 走看看