Cod sursa(job #935518)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 3 aprilie 2013 19:18:32
Problema Rays Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
struct jap
{
    double x,y;
};
bool cmp(jap a,jap b)
{
    return a.y<b.y;
}
int main()
{
    freopen("rays.in","r",stdin);
    freopen("rays.out","w",stdout);
    int n,i,nr=0,m1=0,m2=0;
    double x1,y2,y1,j,dr;
    jap d;
    d.x=0;
    d.y=0;
    vector<jap> v,v2;
    v.push_back(d);
    v2.push_back(d);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%lf%lf%lf",&x1,&y1,&y2);
    if(y1>y2)
    {
        j=y1;
        y1=y2;
        y2=j;
    }
        if(x1>0)
        {
        m1++;
        d.x=y1/x1;
        d.y=y2/x1;
        v.push_back(d);
        }
        else
        {
            m2++;
            d.x=y1/x1*-1;
            d.y=y2/x1*-1;
            v2.push_back(d);
        }
    }
    stable_sort(v.begin()+1,v.end()+1,cmp);
     stable_sort(v2.begin()+1,v2.end()+1,cmp);
     if(m1>0)
     {
    nr++;
    dr=v[1].y;
    for(i=2;i<=m1;i++)
    {
    if(v[i].x>dr)
    {
        nr++;
        dr=v[i].y;
    }
    }
     }
     if(m2>0)
     {
          nr++;
    dr=v2[1].y;
    for(i=2;i<=m2;i++)
    {
    if(v2[i].x>dr)
    {
        nr++;
        dr=v2[i].y;
    }
    }
     }
    printf("%d\n",nr);
    return 0;
}