Pagini recente » Cod sursa (job #2716773) | Cod sursa (job #2673596) | Cod sursa (job #273974) | Cod sursa (job #1879105) | Cod sursa (job #2544951)
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("rays.in");
ofstream cout("rays.out");
struct segment_part {
long long int x;
long long int y;
long long int ys;
bool NO;
};
vector<segment_part> left_, right_;
long long int solve(vector<segment_part> &s) {
if(s.size() == 0)
return 0;
sort(s.begin(), s.end(), [](segment_part a, segment_part b) {
if(a.y*b.x == a.x*b.y)
return a.NO;
return a.y*b.x < a.x*b.y;
});
long long int return_ = 0;
pair<long long int, long long int> start = {s[0].x, s[0].y};
bool empty_ = true;
for(unsigned int x = 0; x<s.size(); x++) {
if(!s[x].NO) {
if(!empty_ && (s[x].ys*start.first >= start.second*s[x].x)) {
empty_ = true;
return_++;
}
} else {
if(empty_){
start = {s[x].x, s[x].y};
empty_ = false;
}
}
}
return return_;
}
int main() {
//ios_base::sync_with_stdio(0);
int n;
cin>>n;
for(int x = 0, a, b, c; x<n; x++) {
cin>>a>>b>>c;
if(b > c)
swap(b, c);
if(a < 0) {
left_.push_back(segment_part{-a, b, -1, true});
left_.push_back(segment_part{-a, c, b, false});
} else {
right_.push_back(segment_part{a, b, -1, true});
right_.push_back(segment_part{a, c, b, false});
}
}
long long int result = solve(left_) + solve(right_);
cout<<result<<endl;
return 0;
}