Pagini recente » Cod sursa (job #1738257) | Cod sursa (job #1666883) | Cod sursa (job #2893707) | Cod sursa (job #1454643) | Cod sursa (job #182471)
Cod sursa(job #182471)
#include <cstdio>
#include <algorithm>
#include <vector>
#define eps 0.000001
using namespace std;
inline double min(double a, double b)
{
return (b - a > eps)? a : b;
}
inline double max(double a, double b)
{
return (b - a > eps)? b : a;
}
struct pant{double li, lf;};
vector <pant> v1,v2;
void citire()
{
int N,x,y1,y2;
pant p;
scanf("%d",&N);
while(N--)
{
scanf("%d %d %d",&x,&y1,&y2);
if(y1 > y2)
swap(y1,y2);
if(x > 0)
{
p.li = (double)(y1/x);
p.lf = (double)(y2/x);
v1.push_back(p);
}
else
{
p.li = (double)(y1/x);
p.lf = (double)(y2/x);
v2.push_back(p);
}
}
}
struct cmp
{
bool operator()(const pant &a, const pant &b)
{
return (b.li - a.li > eps) || (b.li - a.li < eps && b.lf - a.lf > eps);
}
};
int solve(vector <pant> v)
{
int nr = 0;
sort(v.begin(),v.end(),cmp());
vector <pant> p;
for(int i=0; i<v.size(); i++)
{
if(p.empty())
{
p.push_back(v[i]);
nr++;
continue;
}
bool ok = false;
for(int j = 0; j<nr; j++)
{
if(p[j].li - v[i].lf > eps) continue;
if(v[i].li - p[j].lf > eps) continue;
ok = true;
p[j].li = max(v[i].li, p[j].li);
p[j].lf = min(v[j].lf, p[j].lf);
}
if(!ok)
{
p.push_back(v[i]);
nr++;
}
}
return nr;
}
int main()
{
freopen("rays.in","rt",stdin);
freopen("rays.out","wt",stdout);
citire();
printf("%ld",solve(v1) + solve(v2));
}