Pagini recente » Cod sursa (job #1766375) | Cod sursa (job #1713385) | Cod sursa (job #170449) | Cod sursa (job #1652049) | Cod sursa (job #2551131)
#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;
}