死循环求改
查看原帖
死循环求改
551088
FincheuwYggdrasil楼主2022/8/9 16:28

二分查找部分的死循环,看不出来怎么改

题目

#include<bits/stdc++.h>
using namespace std;
const double esp = 1e-6;
const double pi = 3.14159265359;
int tes,r[10010],fri,pan;
int L,R,M;
bool check(double mid)
{
	int cnt = 0;
	for(int j = 1;j <= pan;j++)
		cnt = cnt + (r[j] / mid); 
	return cnt < fri;
}
int main()
{
	scanf("%d",&tes);
	for(int i = 0;i < tes;i++)
	{
		scanf("%d%d",&pan,&fri);
		fri++;
		double maxsiz = 0.0;
		for(int j = 1;j <= pan;j++)
		{
			scanf("%d",&r[j]);
			r[j] = r[j] * r[j];
			if(maxsiz < r[j])
				maxsiz = r[j];
		}
		L = 0.0;
		R = maxsiz;
		while(R - L > esp)
		{
			//cout << "1";
			M = (R + L) / 2;
			if(check(M))
				R = M;
			else
				L = M;
		}
		printf("%.4lf\n",M * pi);
	}
 	return 0;
}

2022/8/9 16:28
加载中...