Pagini recente » Cod sursa (job #2669469) | Cod sursa (job #384111) | Cod sursa (job #2914835) | Cod sursa (job #2273017) | Cod sursa (job #819927)
Cod sursa(job #819927)
#include <fstream>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
ifstream fin("triang.in");
ofstream fout("triang.out");
#define MAXN 1600
const double PI = 3.1415926535;
const double EP = 0.001;
pair<double, double> P[MAXN];
int N;
bool cmp (pair<double, double> a, pair<double, double> b) {
return (b.first - a.first > EP) || ((fabs(b.first - a.first) < EP) && (b.second - a.second > EP));
}
inline int cautare (double x, double y) {
int st = 1, fn = N, m;
while (st <= fn) {
m = (st + fn) / 2;
if ((fabs(P[m].first - x) < EP) && (fabs(P[m].second - y) < EP))
return m;
if (P[m].first - x > EP || ((fabs(P[m].first - x) < EP) && P[m].second - y > EP))
fn = m - 1;
else
st = m + 1;
}
return 0;
}
int main () {
int i, j, rez = 0;
fin >> N;
for (i = 1; i <= N; ++i)
fin >> P[i].first >> P[i].second;
sort (P + 1, P + N + 1, cmp);
for (i = 1; i <= N; ++i)
for (j = i + 1; j <= N; ++j) {
double x, y;
x = P[i].first + (P[j].first - P[i].first) * cos(PI / 3) - (P[j].second - P[i].second) * sin(PI / 3);
y = P[i].second + (P[j].first - P[i].first) * sin(PI / 3) + (P[j].second - P[i].second) * cos(PI / 3);
if (cautare(x, y) > j)
++rez;
x = P[i].first + (P[j].first - P[i].first) * cos(-PI / 3) - (P[j].second - P[i].second) * sin(-PI / 3);
y = P[i].second + (P[j].first - P[i].first) * sin(-PI / 3) + (P[j].second - P[i].second) * cos(-PI / 3);
if (cautare(x, y) > j)
++rez;
}
fout << rez;
return 0;
}