Pagini recente » Cod sursa (job #1983880) | Cod sursa (job #2330003) | Cod sursa (job #2714344) | Cod sursa (job #1825966) | Cod sursa (job #2916106)
#include <fstream>
#include <tuple>
#include <set>
using namespace std;
typedef tuple<int, int, int, int> tup;
int x[1000], y[1000];
set<tup> ms;
set<tuple<int,int>> pf;
bool ispgram(tup e1, tup e2) {
if (get<0>(e1) == get<0>(e2) && get<2>(e1) == get<2>(e2)) { // same ox
if (get<1>(e1) - get<1>(e2) == get<3>(e1) - get<3>(e2))
return true;
} else if (get<1>(e1) == get<1>(e2) && get<3>(e1) == get<3>(e2)) { // same oy
if (get<0>(e1) - get<0>(e2) == get<2>(e1) - get<2>(e2))
return true;
}
return false;
}
void markComb(tup e1, tup e2) {
pf.insert(make_tuple(get<0>(e1), get<1>(e1)));
pf.insert(make_tuple(get<2>(e1), get<3>(e1)));
pf.insert(make_tuple(get<0>(e2), get<1>(e2)));
pf.insert(make_tuple(get<2>(e2), get<3>(e2)));
}
int main() {
ifstream fin("trapez.in");
ofstream fout("trapez.out");
int n, s = 0;
fin >> n;
for (int i = 0; i < n; i++)
fin >> x[i] >> y[i];
fin.close();
for (int i = 0 ; i < n; i++)
for (int j = i + 1; j < n; j++)
if (x[i] == x[j] || y[i] == y[j])
ms.insert(make_tuple(x[i], y[i], x[j], y[j]));
while (!ms.empty()) {
tuple e1 = *ms.begin();
ms.erase(ms.begin());
//cout << "tuple e1 este: " << get<0>(e1) << " " << get<1>(e1) << " " << get<2>(e1) << " " << get<3>(e1) << "\n";
for (tuple e2 : ms) {
if ((get<0>(e1) == get<0>(e2) && get<1>(e1) == get<1>(e2)) ||
(get<0>(e1) == get<2>(e2) && get<1>(e1) == get<3>(e2)) ||
(get<2>(e1) == get<2>(e2) && get<3>(e1) == get<3>(e2)) ||
(get<2>(e1) == get<0>(e2) && get<3>(e1) == get<1>(e2)))
continue;
int count = 0;
for (tuple<int,int> e : pf)
if ((get<0>(e) == get<0>(e1) && get<1>(e) == get<1>(e1)) ||
(get<0>(e) == get<2>(e1) && get<1>(e) == get<3>(e1)) ||
(get<0>(e) == get<0>(e2) && get<1>(e) == get<1>(e2)) ||
(get<0>(e) == get<2>(e2) && get<1>(e) == get<3>(e2)))
count++;
if (count == 4)
continue;
else
markComb(e1, e2);
if (ispgram(e1, e2)) {
//cout << "pgram este1: " << get<0>(e1) << " " << get<1>(e1) << " " << get<2>(e1) << " " << get<3>(e1) << "\n";
//cout << "pgram este2: " << get<0>(e2) << " " << get<1>(e2) << " " << get<2>(e2) << " " << get<3>(e2) << "\n";
s++;
}
s++;
}
}
//cout << "s este: " << s << "\n";
fout << s;
fout.close();
return 0;
}