标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4243 | Accepted: 2517 |
Description
Input
Output
Sample Input
4 10 0 10 100 0 20 20 80 80 60 60 40 40 5 10 15 10 95 10 25 10 65 10 75 10 35 10 45 10 55 10 85 10 5 6 0 10 60 0 4 3 15 30 3 1 6 8 10 10 2 1 2 8 1 5 5 5 40 10 7 9 0
Sample Output
Box 2: 5 Box 1: 4 2: 1
Source
/** 题意:给一个区域的左上和右上坐标,然后给出区域中的n条边,然后,给出m个玩具的坐标; 但是没有排序,要求比如说是有一个玩具的区域的个数 做法:计算几何 **/ #include <iostream> #include<cmath> #include<algorithm> #include<string.h> #include<stdio.h> #define maxn 5000 + 10 using namespace std; int n,m; int mmap[maxn]; int mmpp[maxn]; const double eps = 1e-8; const double PI = acos(-1.0); struct Point { double x; double y; Point(){} Point(double _x,double _y) { x = _x; y = _y; } Point operator - (const Point &b) const { return Point(x - b.x,y - b.y); } double operator ^(const Point &b) const { return x*b.y - y*b.x; } double operator *(const Point &b) const { return x*b.x + y*b.y; } }point[maxn]; struct Line { Point s; Point e; Line(){} Line(Point _s,Point _e) { s = _s; e = _e; } }line[maxn]; bool cmp(Line a,Line b) { return a.s.x < b.s.x; } int mul(Point a,Point b,Point c) { return (b - a) ^(c - a); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif // ONLINE_JUDGE int x1,y1,x2,y2; while(~scanf("%d",&n)) { if(n == 0) break; memset(mmap,0,sizeof(mmap)); memset(mmpp,0,sizeof(mmpp)); scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2); int u,l; for(int i=0;i<n;i++) { scanf("%d %d",&u,&l); line[i] = Line(Point(u,y1),Point(l,y2)); } line[n] = Line(Point(x2,y1),Point(x2,y2)); sort(line,line+n+1,cmp); int x,y; for(int i=0;i<m;i++) { scanf("%d %d",&x,&y); Point pp = Point(x,y); int left = 0; int right = n; int tmp = 0; while(left <= right) { int mid = (left + right) >>1; if(mul(pp,line[mid].s,line[mid].e)<0) { tmp = mid; right = mid-1; } else left = mid+1; } mmap[tmp] ++; } int mmax = 0; for(int i=1;i<=n;i++) { mmpp[i] = 0; } for(int i=0;i<=n;i++) { if(mmap[i]>0) mmpp[mmap[i]] ++; } printf("Box\n"); for(int i=1;i<=n;i++) { if(mmpp[i]>0) printf("%d: %d\n",i,mmpp[i]); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/chenyang920/p/4434420.html