Cod sursa(job #594593)

Utilizator rudarelLup Ionut rudarel Data 8 iunie 2011 15:05:54
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fi("trapez.in");
ofstream fo("trapez.out");
long long n,i,sol,x,y,k,j;
long long nr,nrx,nry;
struct punct{
    long long x,y;
} v[1001],ctg[1000001];
int cmp(punct a,punct b){
    return a.x*b.y<=a.y*b.x;
}
int main() {
    fi>>n;
    for(i=1;i<=n;++i)
        fi>>v[i].x>>v[i].y;
 
    for(i=1;i<n;++i)
        for(j=i+1;j<=n;++j){
            if(v[i].x==v[j].x)
                nrx++;
            else if(v[i].y==v[j].y)
                nry++;
            else{
                if(v[i].y<v[j].y){
                    y=v[j].y-v[i].y;
                    x=v[j].x-v[i].x;
                }else{
                    y=v[i].y-v[j].y;
                    x=v[i].x-v[j].x;
                }
                ctg[++k].x=x;
                ctg[k].y=y;
            }
        }
     
    sort(ctg+1,ctg+k+1,cmp);
     
    for(i=2;i<=k;++i)
        if(ctg[i].x*ctg[i-1].y==ctg[i-1].x*ctg[i].y)
            nr++;
        else{
            if(nr%2){
                x=(nr-1)/2;
                y=nr;
            }
            else{
                x=nr/2;
                y=nr-1;
            }
            sol+=x*y;
            nr=1;
        }
    if(nrx%2){
        x=(nrx-1)/2;
        y=nrx;
    }else{
        x=nrx/2;
        y=nrx-1;
    }
    sol+=x*y;
 
    if(nry%2){
        x=(nry-1)/2;
        y=nry;
    }else{
        x=nry/2;
        y=nry-1;
    }
    sol+=x*y;
     
    fo<<sol;
     
    return 0;
}