输出表示最小的带权输出最小的带权距离之和。
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; } };