Cod sursa(job #3188898)

Utilizator gabriel.9619Gabriel Stefan Tita gabriel.9619 Data 3 ianuarie 2024 23:32:01
Problema Rays Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <climits>
using namespace std;
ifstream fin("rays.in");
ofstream fout("rays.out");

struct punct{
double st;
double dr;
};

vector <punct> s, d;

int n;

int f(vector<punct>& v)
{
    int s=1;
    sort(v.begin(),v.end(),[](punct a,punct b){return a.st<b.st;});
    double mnd = v[0].dr;
    for(int i = 1; i<v.size();i++)
    {
        double st = v[i].st;
        double dr = v[i].dr;
        if(st < mnd)
            mnd=min(mnd,dr);
        else
            s++,mnd = dr;
    }
    return s;
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        int x,y1,y2;
        fin>>x>>y1>>y2;
        if(y1>y2)
            swap(y1,y2);
        double a1 = atan2(y1,abs(x));
        double a2 = atan2(y2,abs(x));
        if( x > 0)
            d.push_back({a1,a2});
        else
            s.push_back({a1,a2});
    }
    int sol = 0;
    if(!s.empty())
        sol+=f(s);
    if(!d.empty())
        sol+=f(d);
    fout<<sol;
}