Pagini recente » Cod sursa (job #1242494) | Cod sursa (job #3126227) | Cod sursa (job #556973) | Cod sursa (job #3180330) | Cod sursa (job #220019)
Cod sursa(job #220019)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
struct ray{float li, lf;};
vector <ray> V1, V2;
int Sol, N;
void citire()
{
int x, y1, y2;
ray r;
scanf("%d",&N);
for(int i = 1; i <= N; ++i)
{
scanf("%d %d %d", &x, &y1, &y2);
float a = (float)y1 / x;
float b = (float)y2 / x;
if(a > b)
r.li = b, r.lf = a;
else
r.li = a, r.lf = b;
if(x > 0)
V1.push_back(r);
else
V2.push_back(r);
}
}
struct cmp
{
bool operator() (const ray a, const ray b) const
{
return ((a.li < b.li) || (a.li == b.li && b.lf < a.lf));
}
};
void solve(vector <ray> V)
{
ray act = V.front();
Sol += 1;
for(vector<ray>::iterator it = V.begin() + 1; it != V.end(); ++it)
{
if((act.lf) > it -> li)
act.li = it -> lf;
else
++Sol, act = *it;
}
}
int main()
{
freopen("rays.in","rt",stdin);
freopen("rays.out","wt",stdout);
citire();
if(!V1.empty())
{
solve(V1);
sort(V1.begin(), V1.end(), cmp());
}
if(!V2.empty())
{
sort(V2.begin(), V2.end(), cmp());
solve(V2);
}
printf("%d\n",Sol);
}