반응형
https://leetcode.com/problems/best-position-for-a-service-centre/submissions/
Best Position for a Service Centre - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
const double EPSILON = 1e-6;
class Solution {
public:
double distance(double cx, double cy, int x, int y){
return sqrt((cx-x)*(cx-x) + (cy-y)*(cy-y));
}
double distanceSum(const vector<vector<int>>& positions, double x, double y){
double res = 0;
for(auto& v : positions)
res += distance(x, y, v[0], v[1]);
return res;
}
double findMax(const vector<vector<int>>& positions, double x){
double y1 = 0, y2 = 100;
while(abs(y2-y1)>EPSILON){
double midy1 = (2*y1 + y2)/3;
double midy2 = (y1 + 2*y2)/3;
double z1 = distanceSum(positions, x, midy1);
double z2 = distanceSum(positions, x, midy2);
if(z1 > z2) y1 = midy1;
else y2 = midy2;
}
return distanceSum(positions, x, (y1+y2)/2);
}
double getMinDistSum(vector<vector<int>>& positions) {
double x1 = 0, x2 = 100;
while(abs(x1-x2)>EPSILON){
double midx1 = (2*x1+x2)/3;
double midx2 = (x1+2*x2)/3;
double z1 = findMax(positions, midx1);
double z2 = findMax(positions, midx2);
if(z1 > z2){
x1 = midx1;
}
else{
x2 = midx2;
}
}
return findMax(positions,(x1 + x2) / 2);
}
};
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 2512번: 예산 - binary search cpp (0) | 2022.06.22 |
---|---|
백준 2110번 : 공유기 설치 - binary search , Decide problem - C++ (0) | 2022.06.22 |
[LeetCode] Split Array Largest Sum - Binary Search (0) | 2022.06.22 |
백준 18223번: 민준이와 마산 그리고 건우 Java 다익스트라 (0) | 2022.06.13 |
백준 20010번 : 악덕 영주 혜유 - Java 크루스칼, 다익스트라 (0) | 2022.06.11 |