Cod sursa(job #3226265)

Utilizator Alex_Mihai10Mihai Alex-Ioan Alex_Mihai10 Data 20 aprilie 2024 19:24:35
Problema Trapez Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
#define MAX 1005
#define err 1e-12

using namespace std;

ifstream fin("trapez.in");
ofstream fout("trapez.out");

pair<int,int>pct[MAX];
struct str
{
    int x1,y1,x2,y2;
}lin[MAX*MAX];

bool crt(str a,str b)
{
    return atan2(a.y2-a.y1,a.x2-a.x1)<atan2(b.y2-b.y1,b.x2-b.x1);
}

bool crt2(pair<int,int>a,pair<int,int>b)
{
    return a.second<b.second;
}

int main()
{
    int n;
    fin>>n;
    int i;
    for(i=1;i<=n;++i)
        fin>>pct[i].first>>pct[i].second;
    int j;
    int ind=0;
    sort(pct+1,pct+n+1,crt2);
    for(i=1;i<n;++i)
        for(j=i+1;j<=n;++j)
            lin[++ind]={pct[i].first,pct[i].second,pct[j].first,pct[j].second};
    sort(lin+1,lin+ind+1,crt);
    ///for(i=1;i<=ind;++i)
       /// cout<<atan2(lin[i].y2-lin[i].y1,lin[i].x2-lin[i].x1)*180/3.1415<<' '<<lin[i].x1<<' '<<lin[i].y1<<' '<<lin[i].x2<<' '<<lin[i].y2<<'\n';
    long long tot=0;
    for(i=1;i<=ind;++i)
    {
        j=i;
        while(j<ind && fabs(atan2(lin[j].y1-lin[j].y2,lin[j].x1-lin[j].x2)-atan2(lin[j+1].y1-lin[j+1].y2,lin[j+1].x1-lin[j+1].x2))<err)
            ++j;
        tot+=1LL*(j-i+1)*(j-i)/2;
        i=j;
    }
    fout<<tot;
    return 0;
}