Cod sursa(job #1500932)

Utilizator ArkinyStoica Alex Arkiny Data 12 octombrie 2015 21:36:17
Problema Rays Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

#define MAX 200001

#define swap(t,a,b)(t=a,a=b,b=t)

struct LINE
{
	double a_y1,a_y2;
};

LINE v1[MAX],v2[MAX];
int N, v1_l=0, v2_l=0;

bool sort_f_1(LINE &e1, LINE& e2)
{
	return e1.a_y2 < e2.a_y2;
}
bool sort_f_2(LINE &e1, LINE &e2)
{
	return e1.a_y1 < e2.a_y1;
}

int main()
{
	FILE *in = fopen("rays.in", "r");
	FILE *out = fopen("rays.out", "w");

	fscanf(in, "%d", &N);
	int x, y1, y2,t;
	for (int i = 1;i <= N;++i)
	{
		
		fscanf(in, "%d", &x);
		fscanf(in, "%d", &y1);
		fscanf(in, "%d", &y2);
		if (y1 > y2)
		    swap(t, y1, y2);

		if (x > 0)
		{
			++v1_l;
			v1[v1_l].a_y1 = (double)y1 / x;
			v1[v1_l].a_y2 = (double)y2 / x;
		}
		else
		{
			++v2_l;
			v2[v2_l].a_y1 = (double)y1 / x;
			v2[v2_l].a_y2 = (double)y2 / x;
		}
		
		
	}
	int sol = 1;
	sort(v1 + 1, v1 + v1_l + 1, sort_f_1);
	int j = 1;
	for (int i = 2;i <= v1_l;++i)
	{
		if (v1[i].a_y1 > v1[j].a_y2)
		{
			++sol;
			j = i;
		}
	}
	sort(v2 + 1, v2 + v2_l + 1, sort_f_2);

	j = 1;
	++sol;
	for (int i = 2;i <= v2_l;++i)
	{
		if (v2[i].a_y2 > v2[j].a_y1)
		{
			++sol;
			j = i;
		}
	}
	fprintf(out, "%d", sol);
	fclose(in);
	fclose(out);
	return 0;
}