108 lines
3.0 KiB
C++
108 lines
3.0 KiB
C++
#include<iostream>
|
|
#include<vector>
|
|
using namespace std;
|
|
class Solution{
|
|
public:
|
|
int numberOfBoomerangs1(vector<vector <int>>& points){
|
|
int points_size = points.size();
|
|
int ans = 0;
|
|
for(vector<int> firstpoint: points){
|
|
for(vector<int> secondpoint: points){
|
|
if(samePoint(firstpoint, secondpoint))continue;
|
|
for(vector<int> thirdpoint: points){
|
|
if(samePoint(secondpoint, thirdpoint) || samePoint(firstpoint, thirdpoint)) continue;
|
|
if(distance(firstpoint, secondpoint) == distance(firstpoint, thirdpoint)){
|
|
ans++;
|
|
cout<<firstpoint[0]<<' '<<firstpoint[1]<<' '<<secondpoint[0]<<' '<<secondpoint[1]<<' '<<thirdpoint[0]<<' '<<thirdpoint[1]<<endl;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ans;
|
|
}
|
|
int numberOfBoomerangs(vector<vector<int>>& points){
|
|
int point_size = points.size();
|
|
int ans =0;
|
|
double dist[510][510];
|
|
for(int i = 0 ; i < point_size ;i++){
|
|
for(int j = 0 ; j < point_size ;j++){
|
|
dist[i][j] = distance(points[i],points[j]);
|
|
}
|
|
}
|
|
|
|
for(int i = 0 ; i < point_size ; i++){
|
|
for(int j = 0 ; j < point_size ; j++){
|
|
cout<<dist[i][j]<<' ';
|
|
}
|
|
cout<<endl;
|
|
}
|
|
/*
|
|
for(int i = 0 ; i < point_size;i++){
|
|
for(int j = i + 1 ; j < point_size ; j++){
|
|
if(i == j) continue;
|
|
for(int k = j + 1 ; k < point_size ; k++) {
|
|
if(i == k || j == k) continue;
|
|
if(dist[i][j] == dist[i][k]){
|
|
ans += 2;
|
|
cout<<points[i][0]<<' ' <<points[i][1]<<' '<<points[j][0]<<' '<<points[j][1]<<' '<<points[k][0]<<' '<<points[k][1]<<' '<<dist[i][j]<<' '<<dist[i][k]<<endl;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
for(int i = 0 ; i < point_size ; i++){
|
|
sort(dist[i],dist[i]+point_size);
|
|
int tmp = 1;
|
|
for(int j = 0 ; j < point_size ; j++)
|
|
cout<<dist[i][j]<<' ';
|
|
cout<<endl;
|
|
for(int j = 1 ; j < point_size ; j++){
|
|
if(dist[i][j] == dist[i][j-1]){
|
|
tmp++;
|
|
}
|
|
else{
|
|
ans += tmp * (tmp-1);
|
|
tmp = 1;
|
|
cout<<i<<' '<<j<<' '<<tmp<<endl;
|
|
}
|
|
}
|
|
ans += tmp * (tmp - 1);
|
|
}
|
|
return ans;
|
|
}
|
|
private:
|
|
bool samePoint(vector<int> a, vector<int> b){
|
|
if(a[0] == b[0] && a[1] == b[1])
|
|
return true;
|
|
return false;
|
|
}
|
|
double distance(vector<int> a, vector<int> b){
|
|
double rlt = (a[0]-b[0])*(a[0]-b[0]) +(a[1]-b[1])*(a[1]-b[1]);
|
|
|
|
return sqrt(rlt);
|
|
}
|
|
};
|
|
int main(){
|
|
Solution sol;
|
|
vector<int> point1 = {0,0};
|
|
vector<int> point2 = {1,0};
|
|
vector<int> point3 = {-1,0};
|
|
vector<int> point4 = {0,1};
|
|
vector<int> point5 = {0,-1};
|
|
vector<vector<int>> ex1 = {point1, point2, point3,point4,point5};
|
|
cout<<sol.numberOfBoomerangs(ex1)<<endl;
|
|
// vector<int> ex2_point1 = {1,1};
|
|
// vector<int> ex2_point2 = {2,2};
|
|
// vector<int> ex2_point3 = {3,3};
|
|
// vecotr<int> ex2_point4 = {
|
|
vector<int> ex2_point1 = {0,0};
|
|
vector<int> ex2_point2 = {0,1};
|
|
vector<int> ex2_point3 = {5,0};
|
|
vector<int> ex2_point4 = {5,1};
|
|
vector<vector<int>> ex2 = {ex2_point1, ex2_point2, ex2_point3,ex2_point4};
|
|
cout<<sol.numberOfBoomerangs(ex2)<<endl;
|
|
|
|
|
|
return 0;
|
|
}
|