Pagini recente » Cod sursa (job #2728631) | Cod sursa (job #1289489) | Cod sursa (job #286446) | Cod sursa (job #2839724) | Cod sursa (job #2147533)
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<tr1/unordered_set>
#define eps 1e-3
using namespace std;
#define pi 3.1415926535897932384626433832795
pair<double,double>v[1505];
struct hashr{
int operator () (const pair<double,double> &x) const{
int rez=x.first*pi+x.second;
return rez;}
};
struct equali{
bool operator () (const pair<double,double> &x,const pair<double,double> &y) const{
if (abs(x.first-y.first)<eps && abs(x.second-y.second)<eps)
return 1;
return 0;}
};
tr1::unordered_set<pair<double,double>,hashr,equali>s;
double sin60=sin(60.0*pi/180.0),cos60=cos(60.0*pi/180.0),sin300=sin(300.0*pi/180.0),cos300=cos(300.0*pi/180.0);
pair<double,double> rota1(pair<double,double>x,pair<double,double>y){
pair<double,double> rez,auxy;
auxy.first=y.first-x.first;
auxy.second=y.second-x.second;
rez.first=auxy.first*cos60-auxy.second*sin60;
rez.second=auxy.first*sin60+auxy.second*cos60;
rez.first+=x.first;
rez.second+=x.second;
return rez;}
pair<double,double> rota2(pair<double,double>x,pair<double,double>y){
pair<double,double> rez,auxy;
auxy.first=y.first-x.first;
auxy.second=y.second-x.second;
rez.first=auxy.first*cos300-auxy.second*sin300;
rez.second=auxy.first*sin300+auxy.second*cos300;
rez.first+=x.first;
rez.second+=x.second;
return rez;}
int main(){
freopen("triang.in","r",stdin);
freopen("triang.out","w",stdout);
int n,i,j;
long long rasp=0;
pair<double,double>rez;
scanf("%d",&n);
if (n<=700){
for(i=1;i<=n;i++)
scanf("%lf%lf",&v[i].first,&v[i].second),s.insert(make_pair(v[i].first,v[i].second));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (i!=j){
rez=rota1(v[i],v[j]);
rasp=rasp+s.count(rez);
rez=rota2(v[i],v[j]);
rasp=rasp+s.count(rez);}
printf("%lld\n",rasp/6);}
return 0;}