Cod sursa(job #2062161)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 10 noiembrie 2017 01:27:18
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <bits/stdc++.h>
 
using namespace std;
 
inline void Boost() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
}
typedef long long int ll;
typedef long double ld;
 
ifstream fin("triang.in");
ofstream fout("triang.out");

const int NMax = 1505;
const double eps = 1e-6;

pair < double, double > v[NMax];
pair < double, double > aux[NMax];

double power(const double &x) {
	return (x * x);
}

double dist(const pair < double, double > &a, const pair < double, double > &b) {
	return sqrt(power(a.first - b.first) + power(a.second - b.second));
}

int cr = 0;
bool cmp(const pair < double, double > &a, const pair < double, double > &b) {
	double distA = dist(v[cr], a);
	double distB = dist(v[cr], b);

	if(abs(distA - distB) > eps) return distA < distB;
	double tnA = atan2(v[cr].second - a.second, v[cr].first - a.first);
	double tnB = atan2(v[cr].second - b.second, v[cr].first - b.first);

	return tnA < tnB;
}

int main() {
    Boost();

	int n;
	fin >> n;

	for(int i = 1; i <= n; ++i) {
		double a, b;
		fin >> a >> b;

		v[i] = {a, b};
		aux[i] = v[i];
	}

	int ans = 0;
	for(int i = 1; i <= n; ++i) {
		cr = i;
		sort(aux + 1, aux + n + 1, cmp);

		for(int j = 3; j <= n; ++j) {
			double dA = dist(v[cr], aux[j - 1]);
			double dB = dist(v[cr], aux[j]);
			double dC = dist(aux[j - 1], aux[j]);

			if(abs(dA - dB) <= eps && abs(dA - dC) <= eps && abs(dB - dC) <= eps) ++ans;
		}
	}

	fout << ans / 3;
    return 0;
}