zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    SqlServer 查看被锁的表和解除被锁的表
    Windows Server 2012 R2 或 2016 无法安装 .Net 3.5.1
    请求文件下载URL过长处理
    T4语法
    windows下 安装 rabbitMQ 及操作常用命令
    ubuntu系统启动qtceator时提示:Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库
    升级到VS2013常见问题
    Windowns 无法启动 Office Software Protection Platform 服务,系统找不到指定的文件
    SVN clean失败解决方法
    使用PostSharp在.NET平台上实现AOP
  • 原文地址:https://www.cnblogs.com/luoshuihanbing/p/3288368.html
Copyright © 2011-2022 走看看