Pagini recente » Cod sursa (job #1834217) | Cod sursa (job #1054839) | Cod sursa (job #2394464) | Cod sursa (job #917525) | Cod sursa (job #935289)
Cod sursa(job #935289)
#include <iostream>
#include <cstdio>
#include <algorithm>
#define infinit 1<<30
using namespace std;
struct point
{
int x,y1,y2;
}v[200010];
struct chestie
{
float x, y;
} p1[200010], p2[200010];
float panta1(point p1,point p2)
{
if(p1.x==p2.x)
return infinit;
return (p2.y1-p1.y1)*1.0/(p2.x-p1.x);
}
float panta2(point p1,point p2)
{
if(p1.x==p2.x)
return infinit;
return (p2.y2-p1.y2)*1.0/(p2.x-p1.x);
}
inline bool comp (const chestie &A, const chestie &B)
{
if (A.x == B.x)
return A.y > B.y;
return A.x < B.x;
}
int main()
{
freopen("rays.in","r",stdin);
freopen("rays.out","w",stdout);
int i,n,k1=0,k2=0, last, Ans = 0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&v[i].x,&v[i].y1,&v[i].y2);
if(v[i].y1>v[i].y2)
{
int aux=v[i].y1;
v[i].y1=v[i].y2;
v[i].y2=aux;
}
}
for(i=1;i<=n;i++)
if(v[i].x < 0)
{
p1[++k1].x=-v[i].y1*1.0/v[i].x;
p1[k1].y=-v[i].y2*1.0/v[i].x;
}
else
{
p2[++k2].x=v[i].y1*1.0/v[i].x;
p2[k2].y=v[i].y2*1.0/v[i].x;
}
sort (p1 + 1, p1 + k1 + 1, comp);
sort (p2 + 1, p2 + k2 + 1, comp);
last = p1[1].y;
for (i = 2; i <= k1; i ++)
if (p1[i].y < last || p1[i].x > last){
Ans ++;
if (p1[i].x > last)
last = p1[i].y;
}
last = p2[1].y;
for (i = 2; i <= k2; i ++)
if (p2[i].y < last || p2[i].x > last){
Ans ++;
if (p2[i].x > last)
last = p2[i].y;
}
cout << Ans;
return 0;
}