Cod sursa(job #935279)

Utilizator smaraldaSmaranda Dinu smaralda Data 2 aprilie 2013 17:51:01
Problema Rays Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>
#include<math.h>
#include<algorithm>
#define eps 1.e-14
using namespace std;
struct TYPE { int x,y1,y2; double p1,p2; };
TYPE stg[200010],drt[200010];
bool cmp (TYPE a, TYPE b)
{
    if(fabs(a.p2-b.p2)<=eps)
        return a.p1-b.p1<=-eps;
    return a.p2-b.p2<=-eps;
}

int main()
{
    freopen("rays.in","r",stdin);
    freopen("rays.out","w",stdout);
    int n,i,st,dr,res,aux,t1,t2,t3;
    double right;
    scanf("%d",&n);
    st=dr=0;
    for(i=1;i<=n;i++)
        {
            scanf("%d%d%d",&t1,&t2,&t3);
            if(t2>t3)
                swap(t2,t3);
            if(t1<0)
                stg[++st]={t1,t2,t3,-t2/t1,-t3/t1};
            else
                drt[++dr]={t1,t2,t3,t2/t1,t3/t1};
        }
    sort(stg+1,stg+1+st,cmp);
    sort(drt+1,drt+1+dr,cmp);
    res=1;
    right=stg[1].p2;
    for(i=2;i<=st;i++)
        if(stg[i].p1-right>eps)
            {
                res++;
                right=stg[i].p2;
            }
    res++;
    right=drt[1].p2;
    for(i=2;i<=dr;i++)
        if(drt[i].p2-right>eps)
            {
                res++;
                right=drt[i].p2;
            }
    printf("%d\n",res);
    return 0;
}