• NYOJ 6 喷水装置(一)


    喷水装置(一)

    时间限制:3000 ms  |           内存限制:65535 KB
    难度:3
     
    描述
    现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。
     
    输入
    第一行m表示有m组测试数据 每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。
    输出
    输出所用装置的个数
    样例输入
    2
    5
    2 3.2 4 4.5 6 
    10
    1 2 3 1 2 1.2 3 1.1 1 2
    样例输出
    2
    5
    
    题意理解简单,起初写得如下 代码1:
     1  
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<math.h>
     5 using namespace std;
     6 int main(){
     7     int m,n,i,count;
     8     double a[600],r[600],sum;
     9     scanf("%d",&m);
    10     while(m--){
    11                count=0;
    12                scanf("%d",&n);
    13     for(i=0;i<n;i++){
    14     scanf("%lf",&r[i]);
    15     if(r[i]<=1) {i--;n--;continue;}
    16     else a[i]=sqrt(r[i]*r[i]-1);
    17     }
    18     sort(a,a+n);
    19     sum=0;
    20     for(i=n-1;i>=0;i--){
    21       sum+=2*a[i];
    22       if(sum>=20) {count++;break;}
    23       else count++;
    24       }
    25     printf("%d
    ",count);
    26    }
    27    return 0;              
    28 }
    29         
    View Code

    分析题意后,进行部分优化 代码2:

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<algorithm>
     4 using namespace std;
     5 int main(){
     6     int m,n,i,count;
     7     double r[600],sum;
     8     scanf("%d",&m);
     9     while(m--)
    10         {
    11         count=0;
    12         scanf("%d",&n);
    13         for(i=0;i<n;i++){
    14         scanf("%lf",&r[i]);//改动,不进行判断,题中提到一定覆盖,则只需排序便可放弃不适合半径值
    15         }
    16         sort(r,r+n);
    17         sum=0;
    18         for(i=n-1;sum<20;i--){
    19           sum+=2*sqrt(r[i]*r[i]-1);
    20           count++;
    21           }
    22         printf("%d
    ",count);
    23        }
    24    return 0;
    25 }
    View Code

    简要说明下,代码二,因为i的递减数值(需舍去最后结束循环时的--i),和count的递增数值一致,可找到结束循环时,i的递减量为n-1-i;

  • 相关阅读:
    几篇操作Excel的文章资源
    [转]Oracle用一个表的列更新另一个表对应记录的列
    【转】Earth Viewers几个三维地球软件比较
    在ArcGIS Server中如何定义“此级别无数据”图片?的终极解决方案
    [转]ODAC 应用技巧 (一)使用 ODAC 的 Net 方式
    Centos7 ipset命令介绍及使用
    在线编辑Word——插入图表 E
    Java 在PPT中创建散点图 E
    yum问题Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again
    Base64和urlencode
  • 原文地址:https://www.cnblogs.com/luoshuihanbing/p/3288368.html
Copyright © 2020-2023  润新知