Cod sursa(job #2551131)

Utilizator Cojocaru_Andrei_CristianCojocaru Andrei Cristian Cojocaru_Andrei_Cristian Data 19 februarie 2020 15:52:54
Problema Rays Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <fstream>
#include <algorithm>

using namespace std;
struct boi
{
    double x,y1,y2,panta1,panta2,stare;
}f[400005],v[400005];

int n,k,p;

bool mycmp1(boi a,boi b)
{
    return a.panta1<b.panta1;
}

bool mycmp2(boi a,boi b)
{
    return a.panta2>b.panta2;
}

int solve1()
{
    int cnt=0;
    sort(v+1,v+k+1,mycmp1);
    int start=1;
    for(int i=2;i<=k;i++)
    {
        if(v[start].panta2<v[i].panta1)
        {
            cnt++;
            start=i;
        }
        else
        {
            if(v[i].panta2<v[start].panta2)
            {
                start=i;

            }
        }
    }
    cnt++;
    return cnt;
}

int solve2()
{
    int cnt=0;
    sort(f+1,f+p+1,mycmp2);
    int start=1;
    for(int i=2;i<=p;i++)
    {
        if(f[start].panta1>f[i].panta2)
        {
            cnt++;
            start=i;
        }
        else
        {
            if(f[i].panta1>f[start].panta1)
            {
                start=i;
            }
        }
    }
    cnt++;
    return cnt;
}
int main()
{
    ifstream cin("rays.in");
    ofstream cout("rays.out");
    double x,y1,y2;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>x>>y1>>y2;
        if(x>=0)
        {
            v[++k].x=x;
            v[k].y1=y1;
            if(min(y2,y1)==0)
               v[k].panta1=0;
            else
              v[k].panta1=x/(min(y2,y1));
            if(max(y2,y1)==0)
               v[k].panta2=0;
            else
               v[k].panta2=x/(max(y2,y1));
            v[k].y2=y2;
        }
        else
        {
            f[++p].x=x;
            f[p].y1=y1;
            if(min(y2,y1)==0)
               f[p].panta1=0;
            else
               f[p].panta1=x/(min(y2,y1));
            if(max(y2,y1)==0)
               f[p].panta2=0;
            else
               f[p].panta2=x/(max(y2,y1));
            f[p].y2=y2;
        }
    }
    int cnt1=solve1();
    int cnt2=solve2();
    cout<<cnt1+cnt2;
    return 0;
}