Cod sursa(job #2287384)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 21 noiembrie 2018 20:27:35
Problema Trapez Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream cin("trapez.in");
ofstream cout("trapez.out");
struct dr{
    long long x1,y1,x2,y2;
} d[1000005];
int n,k,x[1005],y[1005],ans;
int cmp(dr i,dr j){
    long long d1,d2,d3,d4;
    d1=i.y1-i.y2; d2=i.x1-i.x2;
    d3=j.y1-j.y2; d4=j.x1-j.x2;
    return d1*d4<d2*d3;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>x[i]>>y[i];
    for(int i=1;i<n;i++)
        for(int j=i+1;j<=n;j++){
            ++k;
            d[k].x1=x[i];
            d[k].y1=y[i];
            d[k].x2=x[j];
            d[k].y2=y[j];
        }
    sort(d+1,d+k+1,cmp);
    for(int i=1;i<k;i++){
        int cnt=1;
        long long d1,d2,d3,d4;
        d1=d[i].y1-d[i].y2; d2=d[i].x1-d[i].x2;
        d3=d[i+1].y1-d[i+1].y2; d4=d[i+1].x1-d[i+1].x2;
        while(i<k && d1*d4==d2*d3){
            ++cnt; ++i;
            d1=d[i].y1-d[i].y2; d2=d[i].x1-d[i].x2;
            d3=d[i+1].y1-d[i+1].y2; d4=d[i+1].x1-d[i+1].x2;
        }
        ans+=cnt*(cnt-1)/2;
    }
    cout<<ans;
}