Pagini recente » Cod sursa (job #204784) | Cod sursa (job #989818) | Cod sursa (job #2052085) | Rating Viorel Timar (vticj) | Cod sursa (job #2021120)
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
const int N = 1505;
const double EPS = 1e-3;
int ind[N], n, i, j, sol;
double x[N], y[N], px, py, ung, lg;
bool cmp(int a, int b) {
return x[a] == x[b] ? y[a] < y[b] : x[a] < x[b];
}
bool cb(double X, double Y) {
int st = 1, dr = n, mij;
while (st <= dr) {
mij = (st+dr)/2;
if (abs(X-x[ind[mij]]) < EPS && abs(Y-y[ind[mij]]) < EPS)
return 1;
if ( x[ind[mij]]-X > EPS ||
(abs( x[ind[mij]]-X ) < EPS && y[ind[mij]]-Y > EPS ))
dr = mij-1;
else st = mij+1;
}
return 0;
}
int main() {
f >> n;
for (i = 1; i <= n; i++) {
f >> x[i] >> y[i];
ind[i] = i;
}
sort(ind+1, ind+n+1, cmp);
double CM = cos(ung-M_PI/3), SM = sin(ung-M_PI/3), CP = cos(ung+M_PI/3), SP = sin(ung+M_PI/3);
for (i = 1; i <= n; i++)
for (j = i+1; j <= n; j++) {
ung = atan2( (y[ind[j]] - y[ind[i]]), (x[ind[j]]-x[ind[i]]) );
lg = sqrt( (y[ind[j]] - y[ind[i]])*(y[ind[j]] - y[ind[i]]) + (x[ind[j]]-x[ind[i]])*(x[ind[j]]-x[ind[i]]) );
px = x[ind[i]] + lg*CM;
py = y[ind[i]] + lg*SM;
if (cb(px, py))
sol++;
px = x[ind[i]] + lg*CP;
py = y[ind[i]] + lg*SP;
if (cb(px, py))
sol++;
}
g << sol/3;
}