Cod sursa(job #2207222)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 25 mai 2018 11:11:20
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>

using namespace std;
struct segm{
    int a;
    int o;
    int tip;
    int poz;
};
segm v[200001];
int cadran (segm x){
    if (x.a<0)
        return 2;
    return 1;
}
pair <int,int> tan (segm x){
    if (x.a>=0)
        return make_pair( x.o , x.a );
    return make_pair ( x.o , -x.a );
}
int cmp (segm x,segm y){
    int cmp (dreapta x , dreapta y){
    pair <long long,long long> xx,yy;
    xx=tan(x);
    yy=tan(y);
    if (cadran(x)!=cadran(y))
        return cadran(x)<cadran(y);
    return (xx.first*yy.second) < (xx.second * yy.first);
}
}
int main()
{
    FILE *fin=fopen ("rays.in","r");
    FILE *fout=fopen ("rays.out","w");
    int
    fscanf (fin,"%d",&n);
    s=0;
    for (i=1;i<=n;i++){
        fscanf (fin,"%d%d%d",&x,&y1,&y2);
        mini=min(mini,min (y1,y2));
        v[++s].a=x;
        v[s].o=min(y1,y2);
        v[s].tip=1; // incepe un segment
        v[s].poz=i;
        v[++s].a=x;
        v[s].o=max(y1,y2);
        v[s].tip=0; // se termina un segment
        v[s].poz=i;
    }
    for (i=1;i<=s;i++)
        v[s].o-=mini;
    sort (v+1,v+s+1,cmp); // am sortat dupa unghiul cu ox
    for (i=1;i<=s;i++){
        if (v[i].tip==1)
           f[v[i].poz]=make_pair(i,1); // eveniment 1 : incepe un segment
        else
            f[v[i].poz]=make_pair(i,0); // eveniment 2 : se termina un segment
    }
    /// am un vector de intervale, problema se transforma
    sort (f+1,)
    return 0;
}