• 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
     

    题意也是浇水,不过这个题浇水装置的位置没有确定,所以比上面的那道题水,而且精度上也没啥要求。

    唯一让我感觉神奇的就是我定义的1000的数组竟然RuntimeError了!?

    把数组定义到main函数前面(宏定义)就可以了,1000的数组是个大数组?简直神一般的操作。。。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=1000;
     4 bool cmp(int a,int b){
     5     return a>=b;
     6 }
     7 int t,n,ans;
     8 double cnt,l,a[N],b[N];
     9 int main(){
    10     scanf("%d",&t);
    11     while(t--){
    12         l=20;
    13         scanf("%d",&n);
    14         for(int i=0;i<n;i++)
    15           scanf("%lf",&a[i]);
    16         sort(a,a+n,cmp);
    17         ans=0;
    18         for(int i=0;i<n;i++)
    19           b[i]=2*sqrt(a[i]*a[i]-1);
    20         for(int i=0;i<n;i++){
    21             if(b[i]>0){
    22             if(l>0.0){
    23                 l-=b[i];
    24                 ans++;
    25             }
    26             }
    27         }
    28         printf("%d
    ",ans);
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    linux 声音大小调整的命令
    Linux下cron的使用
    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
    yii 删除内容时增加ajax提示
    git 忽略权限
    yii CGridView colum 链接
    yii cgridview 对生成的数据进行分页
    yii cgridview 默认的筛选如何做成选择框
    db2 Reorgchk:重组检查,是否需要重组
    Linux 下文件
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9692880.html
Copyright © 2020-2023  润新知