Cod sursa(job #2207217)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 25 mai 2018 10:57:04
Problema Rays Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb

#include <fstream>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
ifstream fin ("date.in");
ofstream fout("date.out");
int i,n,x,y,y2,r,d,ndr,nst;
double a,b;
pair<double,double> dr[200001], st[200001];
int mod(int val)
{
    if(val<0)
        return -val;
    else
        return val;
}

double sinus(int y, int x)
{
    if(y==0)
        return 0;
    int ok=y/mod(y);
    return 1.0*ok*(mod(y)*mod(y))/(mod(y)*mod(y)+x*x);
}

int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>x>>y>>y2;
        if(y>y2)
            swap(y2, y);
        if(x>0)
            dr[++ndr]=make_pair(sinus(y, x), sinus(y2, x));
        else
            st[++nst]=make_pair(sinus(y, x), sinus(y2, x));
    }
    sort(dr+1, dr+ndr+1);
    a=-10000000;b=-10000000;
    for(i=1;i<=ndr;i++)
    {
        if(dr[i].first>b)
        {
            a=dr[i].first,b=dr[i].second;
            r++;
        }
        else
        {
            a=dr[i].first;
            b=min(b, dr[i].second);
        }
    }
    sort(st+1, st+1+nst);
    a=-10000000;b=-10000000;
    for(i=1;i<=nst;i++)
    {
        if(st[i].first>b)
        {
            a=st[i].first,b=st[i].second;
            d++;
        }
        else
        {
            a=st[i].first;
            b=min(b, st[i].second);
        }
    }
    fout<<r+d;
    fin.close();
    fout.close();
    return 0;
}