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
1 #include <iostream> 2 #include<cstdio> 3 #define db double 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 struct line1 8 { 9 int a,b; 10 }; 11 int cmp(const line1 &x,const line1 &y) 12 { 13 return x.a>y.a; 14 } 15 int xmulti(int x1,int y1,int x2,int y2,int x0,int y0) 16 { 17 return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0); 18 } 19 const int MAXN=5050; 20 line1 lin1[MAXN]; 21 int ans[MAXN]; 22 int main() 23 { 24 int n,m,x1,y1,x2,y2,c,d,first; 25 first=1; 26 while(scanf("%d",&n)==1&&n) 27 { 28 if(first) 29 first=0; 30 else 31 printf("\n"); 32 memset(ans,0,sizeof(ans)); 33 scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2); 34 for(int i=0;i<n;i++) 35 scanf("%d%d",&lin1[i].a,&lin1[i].b); 36 sort(lin1,lin1+n,cmp); 37 while(m--) 38 { 39 scanf("%d%d",&c,&d); 40 int tmp,l=0,r=n; 41 while(l<=r) 42 { 43 int mid=(l+r)/2; 44 if(xmulti(lin1[mid].a,y1,lin1[mid].b,y2,c,d)>0) 45 { 46 tmp=mid; 47 r=mid-1; 48 } 49 else 50 l=mid+1; 51 } 52 ans[tmp]++; 53 } 54 for(int i=0;i<=n;i++) 55 printf("%d: %d\n",i,ans[n-i]); 56 } 57 return 0; 58 }
原文:http://www.cnblogs.com/wang-ya-wei/p/5719100.html