Cod sursa(job #1646006)

Utilizator MirunaMMiruna Mitu MirunaM Data 10 martie 2016 14:42:02
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct pct{long long x,y;};
bool comp(pct a,pct b){
    if(a.y*b.x<=a.x*b.y)
        return true;
    else
        return false;
}
bool comp2(pct a,pct b){
    if(a.x<b.x)
      return true;
    if(a.x==b.x&&a.y<b.y)
      return true;
    return false;
}
pct v[1005],vv[1000*1000+5];
long long vf[1000*1000+5];
int main(){
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
    long long n,i,j,sol=0,l,a=0,b=0,pp;
    long long nr=0;
//scanf("%lld",&n);
cin>>n;
for(i=1;i<=n;i++)
    //scanf("%lld%lld",&v[i].x,&v[i].y);
    cin>>v[i].x>>v[i].y;
sort(v,v+n+1,comp2);
for(i=1;i<=n-1;i++)
    for(j=i+1;j<=n;j++){
        pp=0;
        if(v[i].x-v[j].x==0){
            a++;
            pp=1;
        }

        if(v[i].y-v[j].y==0){
            b++;
            pp=1;
        }
        if(pp==0){
            sol++;
            vv[sol].x=v[i].x-v[j].x;
            vv[sol].y=v[i].y-v[j].y;
        }

    }
sort(vv+1,vv+sol+1,comp);
for(i=1,l=1;i<=sol-1;i++)
    if(vv[i].y*vv[i+1].x==vv[i].x*vv[i+1].y)
        l++;
    else{
        nr++;
        vf[nr]=l;
        l=1;
    }
nr++;
vf[nr]=l;
sol=a*(a-1)/2+b*(b-1)/2;
for(i=1;i<=nr;i++)
    sol+=vf[i]*(vf[i]-1)/2;
//printf("%lld",sol);
cout<<sol;
return 0;
}