Pagini recente » Cod sursa (job #1940263) | Cod sursa (job #2911814) | Cod sursa (job #973950) | Cod sursa (job #317846) | Cod sursa (job #120184)
Cod sursa(job #120184)
#include<stdio.h>
#include<math.h>
#include<algorithm>
#define lg 200005
using namespace std;
int n, i, x, yy1, yy2, nr, st, ind1, ind2, sol;
double tg, end;
struct citire{
int x, yy1, yy2;
};
citire v1[lg], v2[lg];
struct interval{
double st, end;
};
interval q[lg];
inline int ab(int a){
if (a < 0)
return (-a);
return a;
}
int cmp(interval a, interval b){
if (a.st != b.st)
return (a.st < b.st);
return (a.end < b.end);
}
void rezolv(int ind, citire v[]){
int st = 0, nr = 0;
double end, tg;
for (int i = 1; i <= ind; i ++){
x = ab(v[i].x);
yy1 = ab(v[i].yy1);
tg = (double)x / yy1;
q[++nr].st = atan(tg);
yy2 = ab(v[i].yy2);
tg = (double)x / yy2;
q[nr].end = atan(tg);
}
sort(q+1, q+nr+1, cmp);
end = q[1].end;
for (int i = 2; i <= nr; i ++){
if (q[i].st > end)
st ++;
end = q[i].end;
}
//printf("%d\n", st);
sol += st;
}
int main()
{
freopen("rays.in", "rt", stdin);
freopen("rays.out", "wt", stdout);
scanf("%d", &n);
for (i = 1; i <= n; i ++){
scanf("%d%d%d", &x, &yy1, &yy2);
if (x < 0){
v1[++ind1].x = x;
v1[ind1].yy1 = yy1;
v1[ind1].yy2 = yy2;
}
else{
v2[++ind2].x = x;
v2[ind2].yy1 = yy1;
v2[ind2].yy2 = yy2;
}
}
rezolv(ind1, v1);
rezolv(ind2, v2);
printf("%d\n", sol);
fclose(stdin);
fclose(stdout);
return 0;
}