Cod sursa(job #3188096)

Utilizator Theo20067Cismaru Theodor-Alexe Theo20067 Data 1 ianuarie 2024 17:09:51
Problema Rays Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream fin ("rays.in");
ofstream fout("rays.out");
struct elem
{
    double y1,y2;
};
vector <elem> N,P;
int n,i,nr,x,y,z,sol;
double a,b,minim,maxim;
int cmp(elem a,elem b){return a.y1<b.y1;}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>x>>y>>z;
        double Y1=atan2(y,abs(x));
        double Y2=atan2(z,abs(x));
        //fout<<Y1<<" "<<Y2<<"\n";
        if(Y1>Y2)
            swap(Y1,Y2);
        if(x<0)
            N.push_back({Y1,Y2});
        else
            P.push_back({Y1,Y2});
    }
    sort(N.begin(),N.end(),cmp);
    sol++;
    minim=N[0].y1;
    maxim=N[0].y2;
    for(i=1;i<N.size();i++)
    {
        a=N[i].y1;
        b=N[i].y2;
        if(a>maxim)
        {
            sol++;
            minim=a;
            maxim=b;
        }
        if(a<maxim)
            maxim=min(maxim,b);
    }
    sort(P.begin(),P.end(),cmp);
    sol++;
    minim=P[0].y1;
    maxim=P[0].y2;
    for(i=1;i<P.size();i++)
    {
        a=P[i].y1;
        b=P[i].y2;
        if(a>maxim)
        {
            sol++;
            minim=a;
            maxim=b;
        }
        if(a<maxim)
            maxim=min(maxim,b);
    }
    fout<<sol;
    return 0;
}