Pagini recente » Istoria paginii runda/parfum_de_iasomnie/clasament | Cod sursa (job #2920094) | Cod sursa (job #2905768) | Cod sursa (job #2944119) | Cod sursa (job #3184959)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <climits>
using namespace std;
ifstream fin("rays.in");
ofstream fout("rays.out");
struct interv{
double st;
double dr;
};
vector <interv> s;
vector <interv> d;
int n;
int sweep(vector<interv>& v)
{
int s=1;
sort(v.begin(),v.end(),[](interv a,interv 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+=sweep(s);
if(!d.empty())
sol+=sweep(d);
fout<<sol;
}