您的位置:首页 > 其它

练习二 1003 PIE

2016-04-17 20:45 225 查看
题意:有F个人分N块面积可能不同的披萨,要求每人分的面积相同,而且披萨切开后不能重组,求出每人分到披萨的最大面积。

解题思路:根据已知的披萨的总面积可求出每个人可分到的最大面积,以及最小面积0,由此可知所要求的每人分到的披萨的最大面积就在个范围内,再通过二分法取最大面积的中值,不断缩小x所在范围,最终可求得x的值。

感想:可用函数cos(-1,0)求得π的值,注意F为整形变量,最后这个题与1001是一类题目。

代码如下:

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
#define PI acos(-1.0);
int a[10005];
int main()
{
int M,N,F,f,i,max;
double left,right,mid,x;
cin>>M;
while(M--)
{
x=0;max=0;
cin>>N>>F;
for(i=0;i<N;i++)
{
cin>>a[i];
a[i]=a[i]*a[i];
max=a[i]>max?a[i]:max;
}
left=0.0;right=max;mid=(left+right)/2;
while(fabs(left-right)>1e-8)
{
f=0;
for(i=0;i<N;i++)
f+=(int)(a[i]/mid);
if(f>=(F+1))
{
x=mid;
left=mid;
}
else
{
right=mid;
}
mid=(left+right)/2;
}
x=x*PI;
cout<<fixed<<setprecision(4)<<x<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数