Cod sursa(job #1822550)

Utilizator TibiraducanuTiberiu Raducanu Tibiraducanu Data 5 decembrie 2016 08:52:49
Problema Trapez Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

const int N=1005;
const double eps=1.e-8;
int n,cnt;

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++){
          cnt++;
          p[cnt]=(v[j].y-v[i].y)/(v[j].x-v[i].x);
      }
    sort(&p[1],&p[cnt+1]);
    p[0]=-2000000005.0;
    p[cnt+1]=2000000005.0;
    //for(i=1;i<=cnt;i++) printf("%lf ",p[i]);

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

    return 0;
}