码迷,mamicode.com
首页 > 其他好文 > 详细

喷水装置(一)

时间:2016-06-12 07:17:27      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

时间限制: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
//C++ 优秀代码
#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
#include<cmath>
using namespace std;
double Length(double R,double b)
{
    return 2*sqrt(R*R-b*b/4);
}
int main()
{
    const double l=20,w=2;
    int n;
    cin>>n;
    while(n--)
    {
        int m;
        cin>>m;
        double R;
        vector<double> Rs;
        while(m--)
        {
            cin>>R;
            Rs.push_back(R);
        }
        sort(Rs.begin(),Rs.end(),greater<double>());
        double sum=0;
        int i;
        for(i=0;i!=Rs.size();i++)
        {
            if (sum>l) break;
            sum+=Length(Rs[i],w);
        }
        cout<<i<<endl;
    }
}        




//v1.0 C
#include <stdio.h>
#include <math.h>
#define SPRAYNUM 600
void quickSort(double arr[], int left, int right);
int main(void)
{
    int m;
    int n;
    int k;
    int j;
    double Ri[SPRAYNUM]={0};
    scanf("%d", &m);
    getchar();


    for (j = 0; j < m; ++j) {
        scanf("%d", &n);
        getchar();

        for (k = 0; k < n; ++k) {
            scanf("%lf",&Ri[k]);
        }

        quickSort(Ri,0,n-1);
        int sum=1;

        double tmpsqrt=sqrt(pow(Ri[n-1],2)-1)-10;


            for (k =n-2; k >=0; k--) {
                if(tmpsqrt >= 0){

                printf("%d\n",sum);
                break;
                }
                else {
                    tmpsqrt += sqrt(pow(Ri[k],2)-1);
                    ++sum;

            }


        }


    }


    return 0;
}

void quickSort(double arr[], int left, int right){
    int i=left;
    int j=right;

    double pivot = arr[(left + right)/2];
    double tmp;
    while (i <= j) {
        while (arr[i] < pivot) {
            i++;
        }

        while (arr[j] > pivot) {
            j--;
        }

        if(i<=j){
            tmp=arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
            i++;
            j--;
        }
    }
    if(left < j) quickSort(arr, left, j);
    if(i < right) quickSort(arr, i, right);
}




//v0.1 C
#include <stdio.h>
#include <math.h>

#define SPRAYNUM 600
void quickSort(double arr[], int left, int right);
int main(void)
{
    int m;
    int n;
    int k;
    int j;
    double Ri[SPRAYNUM]={0};
    scanf("%d", &m);
    getchar();


    for (j = 0; j < m; ++j) {
        scanf("%d", &n);
        getchar();

        for (k = 0; k < n; ++k) {
            scanf("%lf",&Ri[k]);
        }
        /*for (k = 0; k < n; ++k) {
            printf("%.2lf ",Ri[k]);
        }*/
        //printf("\n");
        quickSort(Ri,0,n-1);
        int sum=1;

        double tmpsqrt=sqrt(pow(Ri[n-1],2)-1)-10;
        //printf("line:%d,tmpsqrt:%lf\n",__LINE__, tmpsqrt);

            for (k =n-2; k >=0; k--) {
                if(tmpsqrt >= 0){
                    //printf("tmpsqrt:%lf\n",tmpsqrt);
                printf("%d\n",sum);
                break;
                }
                else {
                    tmpsqrt += sqrt(pow(Ri[k],2)-1);
                    ++sum;
                    //printf("%d\n",sum);
            }


        }


    }


    return 0;
}

void quickSort(double arr[], int left, int right){
    int i=left;
    int j=right;

    double pivot = arr[(left + right)/2];
    double tmp;
    while (i <= j) {
        while (arr[i] < pivot) {
            i++;
        }

        while (arr[j] > pivot) {
            j--;
        }

        if(i<=j){
            tmp=arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
            i++;
            j--;
        }
    }
    if(left < j) quickSort(arr, left, j);
    if(i < right) quickSort(arr, i, right);
}



喷水装置(一)

标签:

原文地址:http://www.cnblogs.com/guxuanqing/p/5576438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!