Pagini recente » Cod sursa (job #2267000) | Cod sursa (job #1899067) | Cod sursa (job #2331965) | Cod sursa (job #490742) | Cod sursa (job #1966223)
#include <fstream>
#include <algorithm>
#define sinus 0.8660254
#define cosinus 0.5
using namespace std;
ifstream F("triang.in");
ofstream G("triang.out");
int n, st, dr, mij, sol;
double a, b;
pair <double, double > v[1502];
int egal(double x, double y)
{
double dif = x - y;
if(dif >= -0.001 && dif <= 0.001)
return 1;
return 0;
}
int main()
{
F >> n;
for(int i = 1; i<= n; ++ i)
F >> v[i].first >> v[i].second;
sort(v + 1, v + n + 1);
for(int i = 1; i < n - 1; ++ i)
for(int j = i + 1; j < n; ++ j)
{
a = v[i].first + (v[j].first - v[i].first)*cosinus - (v[j].second - v[i].second)*sinus;
b = v[i].second + (v[j].second - v[i].second)*cosinus + (v[j].first - v[i].first)*sinus;
st = j + 1;
dr = n;
while(st <= dr)
{
mij = (st + dr) >> 1;
if(egal(v[mij].first, a) && egal(v[mij].second, b))
{sol ++;break;}
if(a < v[mij].first || (egal(v[mij].first, a) && b < v[mij].second))
dr = mij - 1;
else
st = mij + 1;
}
a = v[i].first + (v[j].first - v[i].first)*cosinus + (v[j].second - v[i].second)*sinus;
b = v[i].second + (v[j].second - v[i].second)*cosinus - (v[j].first - v[i].first)*sinus;
st = j + 1;
dr = n;
while(st <= dr)
{
mij = (st + dr) >> 1;
if(egal(v[mij].first, a) && egal(v[mij].second, b))
{sol ++;break;}
if(a < v[mij].first || (egal(v[mij].first, a) && b < v[mij].second))
dr = mij - 1;
else
st = mij + 1;
}
}
G << sol;
return 0;
}