1 条题解

  • 0
    @ 2025-10-10 20:11:59

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    int n,f,a[10001];
    double pi = 3.14159265359; 
    bool check(double x) 
    {
    	double sv = x * x * 1 ,v;  // s:
    	int i,c = 0; //能够分的人数 
    	for(i = 1; i <= n ; i++) // 每一个披萨的半径 
    	{
    		v = a[i] * a[i] * 1;
    		c = c + int(v / sv);
    	} 
    	if(c >= f + 1) return true;
    	else return false; 
    }
    
    int main()
    {
    	int m,i,j;
    	cin>>m;
    	double l,r,mxr,md;
    	for(i = 1; i <=m ; i ++)
    	{
    		cin>>n>>f;
    		mxr = INT_MIN;
    		for(j = 1; j <= n ; j ++)
    		{
    			cin>>a[j];
    			mxr = max(mxr,a[j]*1.0);
    		}
    		l = 1,r = mxr,md;
    		while(fabs(l - r) >= 10e-10)
    		{
    			md = (l + r) / 2;
    			if(check(md))
    			{
    				l = md;
    			}else{
    				r = md;
    			}
    		}
    		cout<<fixed<<setprecision(4)<<r*r*pi<<endl;
    	} 
        return 0;
    }
    
    
    
    • 1

    信息

    ID
    1089
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者