Pagini recente » Cod sursa (job #1102483) | Cod sursa (job #1255234) | Rating Cristi Alexandru Vasile (Vasile_Cristi_Alexandru_324CA) | Cod sursa (job #2327054) | Cod sursa (job #2207538)
#include <cstdio>
#include <algorithm>
using namespace std;
pair <double,double> st[400001],dr[400001];
int main()
{
FILE *fin=fopen ("rays.in","r");
FILE *fout=fopen ("rays.out","w");
int n,sol,i,ss,sd;
int x,y1,y2;
double sfmin;
fscanf (fin,"%d",&n);
ss=sd=0;
for (i=1;i<=n;i++){
fscanf (fin,"%d%d%d",&x,&y1,&y2);
if (y1>y2)
swap(y1,y2);
if (x<0){
st[++ss].first=(1.0*y1)/(-x);
st[ss].second=(1.0*y2)/(-x);
}
else{
dr[++sd].first=(1.0*y1)/x;
dr[sd].second=(1.0*y2)/x;
}
}
// este gresit sa incerc sa normalizez
sort (st+1,st+ss+1); // am sortat dupa unghiul cu ox
sort (dr+1,dr+sd+1);
sol=0;
sfmin=-2000000000;
for (i=1;i<=ss;i++){
if (st[i].first<=sfmin) // eveniment 1 : incepe un segment
sfmin=min(sfmin,st[i].second);
else {// eveniment 2 : se termina un segment
sol++;
sfmin=st[i].second;
}
}
sfmin=-2000000000;
for (i=1;i<=sd;i++){
if (dr[i].first<=sfmin) // eveniment 1 : incepe un segment
sfmin=min(sfmin,dr[i].second);
else {// eveniment 2 : se termina un segment
sol++;
sfmin=dr[i].second;
}
}
fprintf (fout,"%d",sol);
return 0;
}