标签:operator wing ide not i++ script tab 计算几何 following ebe
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 16222 | Accepted: 7779 |
Output
5 6 0 10 60 0 3 1 4 3 6 8 10 10 15 30 1 5 2 1 2 8 5 5 40 10 7 9 4 10 0 10 100 0 20 20 40 40 60 60 80 80 5 10 15 10 25 10 35 10 45 10 55 10 65 10 75 10 85 10 95 10 0
0: 2 1: 1 2: 1 3: 1 4: 0 5: 1 0: 2 1: 2 2: 2 3: 2 4: 2
1 //2017-08-30 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 7 using namespace std; 8 9 const int N = 5010; 10 11 struct Point{ 12 int x, y; 13 Point(){} 14 Point(int _x, int _y):x(_x), y(_y){} 15 //a-b 表示向量 ba 16 Point operator- (const Point &b) const { 17 return Point(x-b.x, y-b.y); 18 } 19 //向量叉积 20 int operator* (const Point &b) const { 21 return x*b.y - y*b.x; 22 } 23 }A, B; 24 25 int ans[N], U[N], L[N]; 26 int n, m; 27 28 bool check(int id, int x, int y){ 29 Point a(L[id], B.y); 30 Point b(U[id], A.y); 31 Point c(x, y); 32 //令I = 向量ab 叉乘 向量 bc,若I为正,点c在向量ab的左侧(沿向量方向看);为负则在右侧 33 return ((c-a)*(b-a)) > 0; 34 } 35 36 int get_position(int x, int y){ 37 int l = 0, r = n+1, mid, ans; 38 while(l <= r){ 39 mid = (l+r)>>1; 40 if(check(mid, x, y)){ 41 ans = mid; 42 l = mid+1; 43 }else r = mid-1; 44 } 45 return ans; 46 } 47 48 int main() 49 { 50 std::ios::sync_with_stdio(false); 51 //freopen("inputA.txt", "r", stdin); 52 while(cin>>n && n){ 53 cin>>m>>A.x>>A.y>>B.x>>B.y; 54 U[0] = L[0] = A.x; 55 U[n+1] = L[n+1] = B.x; 56 for(int i = 1; i <= n; i++) 57 cin>>U[i]>>L[i]; 58 memset(ans, 0, sizeof(ans)); 59 int x, y; 60 for(int i = 0; i < m; i++){ 61 cin>>x>>y; 62 ans[get_position(x, y)]++; 63 } 64 for(int i = 0; i <= n; i++) 65 cout<<i<<": "<<ans[i]<<endl; 66 cout<<endl; 67 } 68 69 return 0; 70 }
标签:operator wing ide not i++ script tab 计算几何 following ebe
原文地址:http://www.cnblogs.com/Penn000/p/7452248.html