Pagini recente » Cod sursa (job #1623350) | Cod sursa (job #851166) | Cod sursa (job #3272871) | Planificare infoarena | Cod sursa (job #2753472)
#include <iostream>
#include <fstream>
#include <set>
#include <string>
#include <cmath>
std::ifstream f("patrate3.in");
std::ofstream g("patrate3.out");
std::set<std::pair<int, int> > map;
struct {
int x, y;
}patrate[1000];
int n;
int main()
{
f >> n;
float x, y;
for (int i = 0; i < n; ++i)
{
f >> x >> y;
patrate[i].x = round(x * 10000.0f);
patrate[i].y = round(y * 10000.0f);
map.insert({ patrate[i].x, patrate[i].y });
}
long long total = 0;
int x1, y1, x2, y2, x3, y3, x4, y4;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
{
if (patrate[i].x == patrate[j].x && patrate[j].y == patrate[i].y)
continue;
x1 = patrate[i].x;
y1 = patrate[i].y;
x2 = patrate[j].x;
y2 = patrate[j].y;
// pct 1 ________ pct 4
// | |
// | |
// |_______|
// pct 2 pct 3
// rotesc pct 1 in jurul pct 2 cu -90 grade (in sens trigonometric), (adica din x1, y1 scad x2, y2, rotesc (x,y) -> (y, -x) , si dupa adun x2, y2 inapoi)
x3 = y1 - y2 + x2;
y3 = x2 - x1 + y2;
// fac acelasi lucru pt pct 2 doar ca in rotesc cu 90 grade (x, y) -> (-y, x)
x4 = y1 - y2 + x1;
y4 = x2 - x1 + y1;
if (map.find({ x3,y3 }) != map.end() && map.find({ x4,y4 }) != map.end())
total++;
}
g << total / 4; // fiecare patrat e numarat de 4 ori
}