Cod sursa(job #120502)

Utilizator undogSavu Victor Gabriel undog Data 5 ianuarie 2008 18:09:59
Problema Rays Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>
#include<math.h>

struct Int{
	double st,en;
	short handle;
};
struct seg{
	long x,y1,y2;
};
	

double sw(double &a,double &b){
	double aux;
	aux=a;
	a=b;
	b=aux;
	}

Int sw(Int &a, Int &b){
	Int aux;
	aux=a;
	a=b;
	b=aux;
}

int main()
{
	Int ln[100];
	seg rd;
	int i,j,n,ct=0,flag;
	freopen("rays.in","rt",stdin);
	freopen("rays.out","w+",stdout);
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d%d%d",&rd.x,&rd.y1,&rd.y2);
		ln[i].st=atan(rd.y1/(double)rd.x);
		ln[i].en=atan(rd.y2/(double)rd.x);
		ln[i].handle=0;
		if(ln[i].st>ln[i].en)
			sw(ln[i].st,ln[i].en);
	}
	for(i=0;i<n-1;i++)
		for(j=i+1;j<n;j++)
			if(ln[i].st>ln[j].st)
				sw(ln[i],ln[j]);
	Int now;
	i=0;
	do{
		ct++;
		for(ln[i].handle=1,now=ln[i++];i<n;i++){
			if(ln[i].handle)
				continue;
			flag=0;
			if(now.st<ln[i].st)
				now.st=ln[i].st;
			if(now.en>ln[i].en)
				now.en=ln[i].en;
			if(now.en>now.st)
				ln[i].handle=1;
			else break;
		}
		flag=0;
		for(j=0;j<n;j++)
			if(!ln[j].handle){
				i=j;
				flag=1;
				break;
			}
	}while(flag);
	printf("%d",ct);
	fclose(stdin);
	fclose(stdout);
	return 0;
}