zoukankan      html  css  js  c++  java
  • 算法训练 小生物的逃逸

    资源限制
    时间限制:1.0s   内存限制:256.0MB
    问题描述
      空间中有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<iostream>
     2 using namespace std;
     3 //author:ZQ
     4 int select(double a,double b,double c,double d,double x,double y,double z){
     5     double line;
     6     line=(a-x)*(a-x)+(b-y)*(b-y)+(c-z)*(c-z);
     7     if(line<d*d){
     8         return 1;
     9     }else{
    10         return 0;
    11     }
    12 }
    13 int main(){
    14     int n,m;
    15     cin>>n>>m;
    16     double s[n][4];
    17     int sum[m]={0};
    18     for(int i=0;i<n;i++){
    19         cin>>s[i][0]>>s[i][1]>>s[i][2]>>s[i][3];
    20     }
    21     double x,y,z;
    22     int st;
    23     for(int i=0;i<m;i++){
    24         cin>>x>>y>>z;
    25         for(int j=0;j<n;j++){
    26             st=select(s[j][0],s[j][1],s[j][2],s[j][3],x,y,z);
    27             sum[i]=sum[i]+st;
    28         }
    29     }
    30     for(int i=0;i<m;i++){
    31         cout<<sum[i]<<" "; 
    32     }
    33     return 0;
    34 } 
  • 相关阅读:
    asp.net 用户页面权限判断
    asp.net Forms表单验证授权
    asp.net 数据绑定
    asp.net 初识
    .net 中ashx文件的应用理解
    记录第一次给linux配置网络,在虚拟机中连接真实网络
    linux 常用命令
    oracle 建分区表,时间自增
    python(9)- python基础知识刷题
    孤荷凌寒自学python第123天区块链037以太坊的 erc20代币07
  • 原文地址:https://www.cnblogs.com/zq-dmhy/p/12384339.html
Copyright © 2011-2022 走看看