Pagini recente » Cod sursa (job #983631) | Cod sursa (job #192175) | Cod sursa (job #2085938) | Cod sursa (job #3178973) | Cod sursa (job #115537)
Cod sursa(job #115537)
#include <fstream.h>
#include <values.h>
#include <math.h>
double n,dr[2][200000],st[2][200000],nrdr,nrst,Pi=M_PI;
long nr=0;
ifstream fin("rays.in");
ofstream fout("rays.out");
void citire()
{
fin>>n;
long x,y1,y2;
for (long i=0;i<n;i++)
{
fin>>x>>y1>>y2;
if (y1<y2)
{
double aux=y1;
y1=y2;
y2=aux;
}
if (x>0)
{
dr[0][nrdr++]=atan2(x,y1)*180/Pi;
dr[1][nrdr-1]=atan2(x,y2)*180/Pi;
dr[0][nrdr-1]=90-dr[0][nrdr-1];
dr[1][nrdr-1]=90-dr[1][nrdr-1];
}
else
{ x*=-1;
st[0][nrst++]=atan2(x,y1)*180/Pi;
st[1][nrst-1]=atan2(x,y2)*180/Pi;
st[0][nrst-1]=90-st[0][nrst-1];
st[1][nrst-1]=90-st[1][nrst-1];
}
}
fin.close();
}
void adunare(double drr[2][200],double nrdr)
{
double min,max;
for (long i=0;i<nrdr;i++)
if (drr[0][i]!=MAXINT)
{
min=drr[0][i];
max=drr[1][i];
nr++;
for (long j=i+1;j<nrdr;j++)
{
if (drr[0][j]>=min && drr[1][j]<=max)
drr[0][j]=MAXINT;
else
if (drr[0][j]<=min && drr[0][j]>=max && drr[1][j]<=max)
{
min=drr[0][j];
drr[0][j]=MAXINT;
}
else
if (drr[0][j]<=min && drr[0][j]>=max && drr[1][j]>=max)
{
min=drr[0][j];
max=drr[1][j];
drr[0][j]=MAXINT;
}
else
if (drr[0][j]>=min && drr[1][j]>=max && drr[1][j]<=min)
{
max=drr[1][j];
drr[0][j]=MAXINT;
}
}
}
}
int main()
{
citire();
adunare(dr,nrdr);
adunare(st,nrst);
fout<<nr<<"\n";
fin.close();
fout.close();
return 0;
}