输出表示最小的带权输出最小的带权距离之和。
class Solution {
public:
/**
*
* @param n int整型 n
* @param x int整型一维数组 x
* @param xLen int x数组长度
* @param y int整型一维数组 y
* @param yLen int y数组长度
* @param w int整型一维数组 w
* @param wLen int w数组长度
* @return long长整型
*/
struct P{
int x, y, w;
};
static bool cmpx(P p1, P p2){
return p1.x < p2.x;
}
static bool cmpy(P p1, P p2){
return p1.y < p2.y;
}
long long MinimumDistance(int n, int* x, int xLen, int* y, int yLen, int* w, int wLen) {
long long Min = 0, W = 0, s=0;
int xx=0, yy=0;
P p[n];
for(int i=0;i<n;i++){
p[i].x = x[i];
p[i].y = y[i];
p[i].w = w[i];
W += w[i];
}
W >>= 1;
sort(p, p+n, cmpx);
for(int i=0;i<n;i++){
s += p[i].w;
if(s > W){
xx = i;
break;
}
}
for(auto &t: p)
Min += abs(t.x - p[xx].x) * t.w;
s = 0;
sort(p, p+n, cmpy);
for(int i=0;i<n;i++){
s += p[i].w;
if(s > W){
yy = i;
break;
}
}
for(auto &t: p)
Min += abs(t.y - p[yy].y) * t.w;
return Min;
}
};