Cod sursa(job #2146311)

Utilizator amarghescuAnton Marghescu amarghescu Data 27 februarie 2018 22:01:43
Problema Triang Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#define eps 1e-3
using namespace std;
pair<double,double>v[1505];
vector<pair<double,int> >pct[1505];
double dist[1505][1505];
int main(){
freopen("triang.in","r",stdin);
freopen("triang.out","w",stdout);
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%lf%lf",&v[i].first,&v[i].second);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++){
double dis=sqrt((double)(v[i].first-v[j].first)*(v[i].first-v[j].first)+(double)(v[i].second-v[j].second)*(v[i].second-v[j].second));
pct[i].push_back(make_pair(dis,j));
pct[j].push_back(make_pair(dis,i));
dist[i][j]=dist[j][i]=dis;}
for(i=1;i<=n;i++)
sort(pct[i].begin(),pct[i].end());
vector<pair<double,int> >::iterator it,it2;
double dis1,dis2;
int pc1,pc2,rasp=0;
for(i=1;i<=n;i++){
for(it=pct[i].begin();it!=pct[i].end();it++)
for(it2=it+1;it2!=pct[i].end();it2++){
dis1=it->first;
dis2=it2->first;
if (dis2-dis1>eps)
break;
pc1=it->second;
pc2=it2->second;
if (abs(dist[pc1][pc2]-dis1)<=eps)
rasp++;}}
printf("%d\n",rasp/3);
return 0;}