Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <algorithm>
- #include <unordered_set>
- using namespace std;
- int m;
- vector < long double> dre;
- int query(long double aX, long double aY, long double bX, long double bY)
- {
- int ret = 0;
- long double maxP = atan2(aY,aX);
- long double minP = atan2(bY,bX);
- if(maxP < minP)
- swap(maxP, minP);
- ret = upper_bound(dre.begin(), dre.end(), maxP) - lower_bound(dre.begin(), dre.end(), minP);
- //barajul intersecteaza exact ret drepte => ret-1 spatii
- if(ret > 0)
- --ret;
- return ret;
- }
- int main()
- {
- ifstream in("nn.in");
- ofstream out("nn.out");
- int t;
- in >> t >> m;
- for(int i = 1; i <= t; ++i)
- {
- long double x, y;
- in >> x >> y;
- dre.push_back(atan2(y,x));
- }
- sort(dre.begin(),dre.end());
- dre.resize(unique(dre.begin(),dre.end())-dre.begin());
- for(int i = 1; i <= m; ++i)
- {
- long double aX, aY, bX, bY;
- in >> aX >> aY >> bX >> bY;
- out << query(aX, aY, bX, bY) << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement