NYOJ 6 喷水装置(一)

  • 描述
  • 现有一块草坪,长为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
      
#include <stdio.h>
#include <math.h>
int Sort(float m[], int a)
{
    int i,j,k,count;
    float temp,sum;
    for(i=0;i<a-1;i++)
    {
        k=i;
        for(j=i+1;j<a;j++)
        {
            if(m[k]<m[j])
                k=j;
        }
        if(k!=i)
        {
            temp=m[k];
            m[k]=m[i];
            m[i]=temp;
        }
    }
    for(count=0,sum =0,i=0;m[i]>1&&sum<20;i++)
    {
        sum=sum + sqrt(m[i]*m[i]-1)*2;
        ++count;
    }
    return count;

}
int main()
{
    int n,a,i;
    float m[600];
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        scanf("%d",&a);
        getchar();
        for(i=0;i<a;i++)
            scanf("%f",&m[i]);
        getchar();
        printf("%d\n",Sort(m,a));
    }
    return 0;
}
时间: 2024-10-15 02:14:29

NYOJ 6 喷水装置(一)的相关文章

nyoj 12 喷水装置(二)【贪心】+【区间完全覆盖覆盖】

题意:... 这道题就是区间问题三种中的区间完全覆盖问题,不懂的可以看我上一篇也是区间完全覆盖. 直接上代码: #include <stdio.h> #include <math.h> #include <algorithm> using std::sort; struct node{ double le, ri; }s[1005]; int cmp(node a, node b) { return a.le < b.le; } int main() { int

NYOJ 12 喷水装置(二)

pid=12">喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每一个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿.请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪所有润湿. 输入 第一行输入一个正整数N表示共同拥有n次測试数据. 每一组測试数据的第一行有三个整数n,w,h,n表示共同拥有n个喷水装置,w表示草坪的

NYOJ 6 喷水装置(一)

#include<stdio.h>#include<math.h>#include<string.h>#include<algorithm>using namespace std;int cmp(double a,double b){ return a>b;}double f(double R) //求出每个喷水装置的长度 { return 2*sqrt((double)(R*R-1));}int main(){ int T,m,i,k; double

nyoj 12——喷水装置二——————【贪心-区间覆盖】

喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿.请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿. 输入 第一行输入一个正整数N表示共有n次测试数据.每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵向长度.随后的n行,

nyoj 12 喷水装置(二) 贪心 区间覆盖

思路很简单 根据坐标和半径 得到每个喷水设置能够覆盖的左右坐标 然后按左坐标从小到大排序 筛选时候如果喷水设置的左坐标小于等于起始点star用while循环寻找能够覆盖最大的右坐标 然后更新起始点star为寻找到的最大右坐标 具体看代码: #include <stdio.h> #include <math.h> #include <algorithm> using namespace std; struct node { double left,right; }c[10

三类基于贪心思想的区间覆盖问题

一.区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖. 样例:一个长度为8的区间,可选的线段有[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5]. 求解过程: 1.将每一条线段按左端点递增顺序排列,如果左端点相同,按右端点递增顺序排列,排完序后为[1,4],[2,4],[2,6],[3,5],[3,6],[3,7],[6,8]: 2.设置一个变量表示已覆盖到的区间右端点,

nyoj 喷水装置(一)(简单的贪心)

喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润. 输入 第一行m表示有m组测试数据 每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有

喷水装置(一)--nyoj题目6

喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润. 输入 第一行m表示有m组测试数据每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个

nyoj 题号12 喷水装置(二)——南阳oj

题目信息: 喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿.请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿. 输入 第一行输入一个正整数N表示共有n次测试数据. 每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵向长度