Cod sursa(job #2406255)

Utilizator CiprianC11Constantinescu Ciprian CiprianC11 Data 15 aprilie 2019 16:19:29
Problema Rays Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

struct s { double p; bool t; };

const double pi = 2.0 * acos(0.0), e = 1e-14;

bool cmp(s a, s b) { if(fabs(a.p - b.p) < e) return a.t > b.t; return a.p < b.p; };

vector<s> v;

int main()
{
    freopen("rays.in", "r", stdin);
    freopen("rays.out", "w", stdout);
    int x, y1, y2, n, cnt = 0, ans = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
    {
        scanf("%d%d%d", &x, &y1, &y2);
        if(y1 > y2) swap(y1, y2);
        v.push_back({atan2(y1, x) - pi / 2, 1});
        if(v.back().p <= e) v.back().p += 2 * pi;
        if(v.back().p <= pi) v.back().t = 0;
        v.push_back({atan2(y2, x) - pi / 2, 0});
        if(v.back().p <= e) v.back().p += 2 * pi;
        if(v.back().p <= pi) v.back().t = 1;
    }
    sort(v.begin(), v.end(), cmp);
    for(int i = 0; i < v.size(); i++)
    {
        if(v[i].t) cnt++;
        else cnt--, ans += !cnt;
    }
    printf("%d", ans);
    return 0;
}