Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <unordered_set>
  6.  
  7. using namespace std;
  8.  
  9. int m;
  10. vector < long double> dre;
  11.  
  12. int query(long double aX, long double aY, long double bX, long double bY)
  13. {
  14.     int ret = 0;
  15.     long double maxP = atan2(aY,aX);
  16.     long double minP = atan2(bY,bX);
  17.     if(maxP < minP)
  18.         swap(maxP, minP);
  19.     ret = upper_bound(dre.begin(), dre.end(), maxP) - lower_bound(dre.begin(), dre.end(), minP);
  20.  
  21.     //barajul intersecteaza exact ret drepte => ret-1 spatii
  22.     if(ret > 0)
  23.         --ret;
  24.     return ret;
  25. }
  26.  
  27. int main()
  28. {
  29.     ifstream in("nn.in");
  30.     ofstream out("nn.out");
  31.  
  32.     int t;
  33.     in >> t >> m;
  34.     for(int i = 1; i <= t; ++i)
  35.     {
  36.         long double x, y;
  37.         in >> x >> y;
  38.         dre.push_back(atan2(y,x));
  39.     }
  40.  
  41.     sort(dre.begin(),dre.end());
  42.     dre.resize(unique(dre.begin(),dre.end())-dre.begin());
  43.  
  44.     for(int i = 1; i <= m; ++i)
  45.     {
  46.         long double aX, aY, bX, bY;
  47.         in >> aX >> aY >> bX >> bY;
  48.         out << query(aX, aY, bX, bY) << "\n";
  49.     }
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement