Cod sursa(job #1822947)

Utilizator TibiraducanuTiberiu Raducanu Tibiraducanu Data 5 decembrie 2016 19:23:33
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

const int N=1005, Inf=1e9;
const double eps=1.e-14;
int n,cnt,nr;
long long sol;

struct Point{
  double x,y;
} v[N];
double p[N*N];

int main()
{
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);

    int i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%lf%lf",&v[i].x,&v[i].y);
    }

    for(i=1;i<n;i++)
      for(j=i+1;j<=n;j++){
          if(v[j].x==v[i].x) p[++cnt]=Inf;
          else p[++cnt]=(v[j].y-v[i].y)/(v[j].x-v[i].x);
      }
    sort(&p[1],&p[cnt+1]);
    p[0]=Inf, p[cnt+1]=Inf;

    for(i=1;i<=cnt+1;i++){
        if(fabs(p[i]-p[i-1])<eps) nr++;
        else{
            sol+=nr*(nr-1)/2;
            nr=1;
        }
    }
    printf("%lld\n",sol);

    return 0;
}