标签:include 题解 eps mos inter org pen view miss
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 16509 | Accepted: 7920 |
Description
Input
Output
Sample Input
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
Sample Output
0: 2 1: 1 2: 1 3: 1 4: 0 5: 1 0: 2 1: 2 2: 2 3: 2 4: 2
Hint
Source
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #include <map> #include <vector> #include <set> #include <string> #include <math.h> using namespace std; struct Point { int x,y; Point(){} Point(int _x,int _y) { x = _x;y = _y; } Point operator -(const Point &b)const { return Point(x - b.x,y - b.y); } int operator *(const Point &b)const { return x*b.x + y*b.y; } int operator ^(const Point &b)const { return x*b.y - y*b.x; } }; struct Line { Point s,e; Line(){} Line(Point _s,Point _e) { s = _s;e = _e; } }; int xmult(Point p0,Point p1,Point p2) //计算p0p1 X p0p2 { return (p1-p0)^(p2-p0); } const int MAXN = 5050; Line line[MAXN]; int ans[MAXN]; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n,m,x1,y1,x2,y2; bool first = true; while(scanf("%d",&n) == 1 && n) { if(first)first = false; else printf("\n"); scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2); int Ui,Li; for(int i = 0;i < n;i++) { scanf("%d%d",&Ui,&Li); line[i] = Line(Point(Ui,y1),Point(Li,y2)); } line[n] = Line(Point(x2,y1),Point(x2,y2)); int x,y; Point p; memset(ans,0,sizeof(ans)); while( m-- ) { scanf("%d%d",&x,&y); p = Point(x,y); int l = 0,r = n; int tmp; while( l <= r) { int mid = (l + r)/2; if(xmult(p,line[mid].s,line[mid].e) < 0) { tmp = mid; r = mid - 1; } else l = mid + 1; } ans[tmp]++; } for(int i = 0; i <= n;i++) printf("%d: %d\n",i,ans[i]); } return 0; }
标签:include 题解 eps mos inter org pen view miss
原文地址:http://www.cnblogs.com/lalalatianlalu/p/7672585.html