問題
http://community.topcoder.com/stat?c=problem_statement&pm=10840&rd=14182
2次元座標上の複数の点が与えられる。
ここから2つの点を選び、それぞれ各点が中心となるように正方形をそれぞれ
1つずつ設置したい。
正方形の1辺は整数になるようにしたい。
また、正方形は互いに重ならないようにしたい。
このとき、正方形の設置の仕方の総数を求める。
解き方
ある2点の選び方すべてについて、置けるすべての正方形の長さを
試してあげればよい。
選んだ2点の距離*2が、2つの正方形の1辺の和以下であればよい。
ある点の距離*2我与えられたときの置き方の総数は、
例えば長さがn=5であったとき1+2+3+4となるので(n-1)*n/2となる。
コード
class TurretPlacement {
public: long long count(vector<int> x, vector<int> y) {
long long ret=0;
int n=x.size();
FORE(i,0,n)FORE(j,i+1,n){
double d=sqrt((x[j]-x[i])*(x[j]-x[i])+(y[j]-y[i])*(y[j]-y[i]));
long long num=d*2;
ret+=(num-1)*num/2.0;
}
return ret;
}
};
public: long long count(vector<int> x, vector<int> y) {
long long ret=0;
int n=x.size();
FORE(i,0,n)FORE(j,i+1,n){
double d=sqrt((x[j]-x[i])*(x[j]-x[i])+(y[j]-y[i])*(y[j]-y[i]));
long long num=d*2;
ret+=(num-1)*num/2.0;
}
return ret;
}
};