2026/5/20 15:33:46
网站建设
项目流程
网站推广文章,成都平面设计公司排名前10,展示设计公司有哪些,做网站推广都有哪些行业给你一个二维整数数组 squares #xff0c;其中 squares[i] [xi, yi, li] 表示一个与 x 轴平行的正方形的左下角坐标和正方形的边长。找到一个最小的 y 坐标#xff0c;它对应一条水平线#xff0c;该线需要满足它以上正方形的总面积 等于 该线以下正方形的总面积。答案如果…给你一个二维整数数组squares其中squares[i] [xi, yi, li]表示一个与 x 轴平行的正方形的左下角坐标和正方形的边长。找到一个最小的y 坐标它对应一条水平线该线需要满足它以上正方形的总面积等于该线以下正方形的总面积。答案如果与实际答案的误差在10^-5以内将视为正确答案。注意正方形可能会重叠。重叠区域应该被多次计数。示例 1输入squares [[0,0,1],[2,2,1]]输出1.00000解释任何在y 1和y 2之间的水平线都会有 1 平方单位的面积在其上方1 平方单位的面积在其下方。最小的 y 坐标是 1。示例 2输入squares [[0,0,2],[1,1,1]]输出1.16667解释面积如下线下的面积7/6 * 2 (红色) 1/6 (蓝色) 15/6 2.5。线上的面积5/6 * 2 (红色) 5/6 (蓝色) 15/6 2.5。由于线以上和线以下的面积相等输出为7/6 1.16667。提示1 squares.length 5 * 10^4squares[i] [xi, yi, li]squares[i].length 30 xi, yi 10^91 li 10^9所有正方形的总面积不超过10^12。分析浮点二分答案设当前的上界为 r下界为 l中线为 mid。分别计算当前答案的上方和下方面积和如果面积差小于 10 的 -5 次方则可将 rmid否则 lmid。因为题目要求答案误差范围在 10 的 -5 次方内所以结束条件为 r-l0.00001。double separateSquares(int** squares, int squaresSize, int* squaresColSize) { double ans0; int lowsquares[0][1],highsquares[0][1]squares[0][2]; for(int i1;isquaresSize;i) lowfmin(low,squares[i][1]),highfmax(high,squares[i][1]squares[i][2]); double llow,rhigh; while(lr) { double mid(lr)/2.0,area_l0.0,area_h0.0; for(int i0;isquaresSize;i) { if(midsquares[i][1])area_h1.0*squares[i][2]*squares[i][2]; else if(midsquares[i][1]squares[i][2])area_l1.0*squares[i][2]*squares[i][2]; else { double tempsquares[i][2]*1.0*(squares[i][1]squares[i][2]-mid); area_htemp,area_l1.0*squares[i][2]*squares[i][2]-temp; } } if(area_harea_l)rmid; else if(area_harea_l)lmid; // printf(l%f r%f mid%f\n,l,r,mid); if(r-l0.00001) { ansl;break; } } return ans; }