Cod sursa(job #2206713)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 23 mai 2018 15:46:28
Problema Rays Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
ifstream fin ("rays.in");
ofstream fout("rays.out");
int i,n,x,y,y2,r,d;
vector<pair<double, int> > dr, st;
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);
    int cateta=mod(y);
    double ipotenuza=sqrt(cateta*cateta+x*x);
    return 1.0*ok*cateta/ipotenuza;
}

int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>x>>y>>y2;
        if(y<y2)
            swap(y2, y);
        if(x>0)
        {
            dr.push_back(make_pair(sinus(y, x), 1));
            dr.push_back(make_pair(sinus(y2, x), -1));
        }
        else
        {
            st.push_back(make_pair(sinus(y, x), 1));
            st.push_back(make_pair(sinus(y2, x), -1));
        }
    }
    sort(dr.begin(), dr.end());
    for(i=dr.size()-1;i>=0;i--)
    {
        if(i==dr.size()-1){r=1;continue;}
        if(dr[i].second==1&&dr[i+1].second!=1)
            r++;
    }
    sort(st.begin(), st.end());
    for(i=st.size()-1;i>=0;i--)
    {
        if(i==st.size()-1){d=1;continue;}
        if(st[i].second==1&&st[i+1].second!=1)
            d++;
    }
    fout<<r+d;
    fin.close();
    fout.close();
    return 0;
}