Pagini recente » Cod sursa (job #1325524) | Cod sursa (job #2144477) | Cod sursa (job #2830312) | Cod sursa (job #692328) | Cod sursa (job #1446314)
#include <fstream>
#include <algorithm>
#include <set>
#include <cmath>
#define NMAX 1501
#define eps 0.001
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
int n, i, j, rez=0;
double sqrt3=sqrt(3);
struct punct
{
double xx, yy;
};
punct v[NMAX], p1, p2;
set <punct> m;
bool egale(double a, double b)
{
double e=a-b;
if (e<0) e=-e;
if (e<eps) return 1;
return 0;
}
bool cmp(punct a, punct b)
{
if (egale(a.xx,b.xx)) return a.yy<b.yy;
return a.xx<b.xx;
}
int main()
{
f>>n;
for (i=1; i<=n; ++i)
f>>v[i].xx>>v[i].yy;
sort(v+1,v+n+1,cmp);
for (i=1; i<=n-1; ++i)
for (j=i+1; j<=n; ++j)
{
p1.xx=v[i].xx+v[j].xx+(v[i].yy-v[j].yy)*sqrt3;
p1.yy=v[i].yy+v[j].yy+(v[j].xx-v[i].xx)*sqrt3;
p2.xx=v[i].xx+v[j].xx+(v[j].yy-v[i].yy)*sqrt3;
p2.yy=v[i].yy+v[j].yy+(v[i].xx-v[j].xx)*sqrt3;
for (int k=1; k<=n; ++k)
{
if (v[k].xx>p1.xx && v[k].xx>p2.xx) break;
if (egale(v[k].xx,p1.xx) && egale(v[k].yy,p1.yy)) rez++;
if (egale(v[k].xx,p2.xx) && egale(v[k].yy,p2.yy)) rez++;
}
}
g<<rez<<'\n';
return 0;
}