Pagini recente » Cod sursa (job #262444) | Cod sursa (job #1111747) | Cod sursa (job #2049619) | Cod sursa (job #1276949) | Cod sursa (job #2751046)
#include <fstream>
#include <set>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
set<pair<int, int>> puncte;
int n, nr;
float x, y;
int xd, yd;
int dx, dy;
int main() {
f >> n;
for (int i = 0; i < n; i++) {
f >> x >> y;
puncte.insert({ ceil(x * 10000), ceil(y * 10000) }); //se insereaza toate punctele intr-un set, transformate in int-uri
}
for (auto i = puncte.begin(); i != puncte.end(); i++)
for (auto j = puncte.begin(); j != puncte.end(); j++)
if (i != j) { //pentru fiecare punct i se verifica daca punctul j poate fi pe latura cu el (in ordine counter-clockwise) intr-un patrat
xd = i->second - j->second;
yd = j->first - i->first;
//daca poate fi, atunci punctele de pe latura opusa trebuie sa fie gasite in setul de puncte
if (puncte.find({ i->first + xd, i->second + yd }) != puncte.end() && puncte.find({ j->first + xd, j->second + yd }) != puncte.end())
nr++;
}
//fiecare patrat va fi gasit de 4 ori, cate o data pentru fiecare punct.
g << nr / 4;
}