Pagini recente » Cod sursa (job #1598098) | Cod sursa (job #1040390) | Cod sursa (job #2806051) | Cod sursa (job #1594913) | Cod sursa (job #2760743)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
int n, contor = 0;
set<pair<int,int>> multime; //avem puncte unice, deci folosim set;
pair<int,int> v[1001];//am folosit pair deoarece este mai usor de folosit find in set, decat cu struct
bool verificaPatrat(pair<int,int> a, pair<int,int> b)
{
pair<int,int> c,d;
int x,y; //luam cate 2 puncte, si verificam daca celelalte doua puncte care ar fi
//construit patratul exista in multime
x = a.second - b.second;
y = b.first - a.first;
c.first = a.first + x; //construim triunghiurile de sustinere folosind laturile x si y
c.second = a.second + y;
d.first = b.first + x;
d.second = b.second + y;
if(multime.find(c) != multime.end() && multime.find(d) != multime.end())
return 1; //daca gasim punctele construite c si d in multime e ok
return 0;
}
}
int main()
{
float x,y;
fin>>n;
for( int i = 0; i < n; i++)
{
fin>>x>>y;
v[i].first = round(x * 10000);
v[i].second = round(y * 10000);
multime.insert(v[i]);
}
for(int i = 0; i < n; i++)
for(int j = 0 ; j < n ; j++)
if(i != j)
if(verificaPatrat(v[i], v[j]) == 1)
contor++;
contor /= 4; //deoarece numaram patratul pentru fiecare latura a acestuia(pereche de 2 puncte din multime)
fout<<contor;
return 0;
}