描述
现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0
#include <iostream>
#include <list>
#include <sstream>
#include <iterator>
#include <bits/stdc++.h>
using namespace std;
int device_num[100];
int main()
{
int m,n;
double num;
double sum = 0;
list<double> l[100];
list<double>::iterator it;
cin >> m;
for(int i = 0 ; i < m ; i++)
{
cin >> n;
for(int j = 0 ; j < n ; j++)
{
cin >> num;
l[i].push_back(num);
}
l[i].sort();
l[i].reverse();
}
for(int i = 0 ; i < m ; i++)
{
it = l[i].begin();
while(sum < 20)
{
sum += (sqrt((*it) * (*it) - 1) * 2);
it++;
device_num[i]++;
}
sum = 0;
}
for(int i = 0 ; i < m ; i++)
{
cout << device_num[i] << endl;
}
}
优化代码:
#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;
}
}