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 sum,t,a[1010];
  scanf("%d\n",&T);
  while(T--)
  {
    memset(a,0,sizeof(a));
    scanf("%d",&m);
    for(i=0,k=0;i<m;i++)
    {
      scanf("%lf",&t);
      if(t>1)
        a[k++]=t;//将半径大于一的喷水装置存入数组,装置个数为k
    }
    sort(a,a+k,cmp);//快排,将喷水装置的覆盖长度,由大到小排序
    for(i=0,sum=0.0;i<k;i++)
    {
      sum+=f(a[i]);
      if(sum>=20.0)
      {
        break;
      }
    //printf("%d\n",i+1);
    }
    printf("%d\n",i+1);
  }
}

你可能感兴趣的:(OJ)