Cod sursa(job #2568259)

Utilizator AffectiveSmile2Mihnea Matea AffectiveSmile2 Data 3 martie 2020 21:42:48
Problema Trapez Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
long long int i,j,n,c,d,ctfractii,ind,rezultat;
double val,a,b;
bool gasit=0;
struct fractii
{
    double valoare;
    long long int aparitii;
} fr[100010];
struct coordonate
{
    long long int x;
    long long int y;
} p[100010];
bool cmp(coordonate a, coordonate b)
{
    if(a.x>b.x) return 0;
    else if (a.x==b.x && a.y>b.y) return 0;
    return 1;
}
int main()
{
    f>>n;
    for(i=1; i<=n; i++)
        f>>p[i].x>>p[i].y;
    sort(p+1,p+n+1,cmp);
    ///for(i=1;i<=n;i++)
    ///cout<<p[i].x<<' '<<p[i].y<<'\n';
    for(i=1; i<n; i++)
        for(j=i+1; j<=n; j++)
        {

            a=p[i].y-p[j].y;
            b=p[i].x-p[j].x;
            if(b!=0)val=a/b;
            else if(a!=0)val=a;
            else val=a;
            gasit=0;
            for(ind=1; ind<=ctfractii; ind++)
                if(val==fr[ind].valoare)
                {

                    fr[ind].aparitii++;
                    gasit=1;
                    break;
                }
            if(gasit==0)
            {
                ctfractii++;
                fr[ctfractii].valoare=val;
                fr[ctfractii].aparitii++;
            }
        }
    for(i=1; i<=ctfractii; i++)
        if(fr[i].aparitii>1)
            rezultat+=(fr[i].aparitii*(fr[i].aparitii-1)/2);
    g<<rezultat;
}