• 算法训练 小生物的逃逸


    资源限制
    时间限制: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 } 
  • 相关阅读:
    相邻相邻问题
    修改sqlserver2008数据库的排序规则 (转)
    备份删除
    SQL Server 2005系统数据库master重建、修复(转)
    SQL SERVER 2008 重建损坏的master (转)
    深入理解JavaScript作用域和作用域链
    js词法分析
    利用 Console 来学习、调试JavaScript
    expression解决IE6下固定定位的兼容
    浏览器事件的思考
  • 原文地址:https://www.cnblogs.com/zq-dmhy/p/12384339.html
Copyright © 2020-2023  润新知