問題
http://community.topcoder.com/stat?c=problem_statement&pm=9976&rd=13514
(x、y)の点がN個与えられる。
この点を1個~N個までそれぞれ同じ位置にあるよう移動させるときの、
それぞれの最小移動数を求める。
解き方
各点の移動距離が最小となるx、y座標は、
与えられたx、y座標のいずれかになる。
よって、与えられたx、y座標のすべてを始点としたときの
移動距離が最小のものを更新していって求める。
コード
class TheTower {
public: vector<int> count(vector<int> x, vector<int> y) {
int n=x.size();
vector<int> ans(n,1e+9);
FORE(i,0,n)FORE(j,0,n){
vector<int> vx;
FORE(k,0,n)vx.push_back(abs(x[i]-x[k])+abs(y[j]-y[k]));
sort(all(vx));
int sum=0;
FORE(k,0,n){
sum+=vx[k];
ans[k]=min(ans[k],sum);
}
}
return ans;
}
};
public: vector<int> count(vector<int> x, vector<int> y) {
int n=x.size();
vector<int> ans(n,1e+9);
FORE(i,0,n)FORE(j,0,n){
vector<int> vx;
FORE(k,0,n)vx.push_back(abs(x[i]-x[k])+abs(y[j]-y[k]));
sort(all(vx));
int sum=0;
FORE(k,0,n){
sum+=vx[k];
ans[k]=min(ans[k],sum);
}
}
return ans;
}
};