poj 2398 计算几何
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <algorithm> 5 using namespace std; 6 7 struct point{ 8 int x,y; 9 }; 10 11 struct line{ 12 point a,b; 13 }; 14 line lline[5005]; 15 16 int cnt[5005]; 17 int res[5005]; 18 int cross(point p1,point p2,point p0){ 19 return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x); 20 } 21 22 bool cmp(line c,line d){ 23 return c.b.x < d.b.x ; 24 } 25 26 int main() 27 { 28 int n,m,x1,x2,y1,y2; 29 int t1,t2; 30 point c; 31 while(cin>>n&&n){ 32 cin>>m>>x1>>y1>>x2>>y2; 33 lline[0].a.x=x1,lline[0].a.y=y1; 34 lline[0].b.x=x1,lline[0].b.y=y2; 35 lline[n+1].a.x = x2,lline[n+1].a.y=y1; 36 lline[n+1].b.x = x2,lline[n+1].b.y=y2; 37 for(int i=1;i<=n;i++){ 38 scanf("%d%d",&t1,&t2); 39 lline[i].a.x=t1; 40 lline[i].a.y=y1; 41 lline[i].b.x=t2; 42 lline[i].b.y=y2; 43 } 44 45 sort(lline,lline+n+2,cmp); 46 // for(int i=0;i<n+2;i++) 47 // cout<<lline[i].b.x<<" "<<lline[i].b.y<<" "<<lline[i].a.x<<" "<<lline[i].a.y<<endl; 48 memset(cnt,0,sizeof(cnt)); 49 for(int i=0;i<m;i++){ 50 cin>>c.x>>c.y; 51 for(int j=0;j<n+2;j++){ 52 //cout<<j<<" "<<cross(c,lline[j].a,lline[j].b)<<endl; 53 if(cross(c,lline[j].a,lline[j].b)>0){ 54 continue; 55 }else{ 56 cnt[j-1]++; 57 break; 58 } 59 } 60 } 61 // for(int i=0;i<=n;i++) 62 // cout<<cnt[i]<<endl; 63 memset(res,0,sizeof(res)); 64 for(int i=0;i<=n;i++){ 65 res[cnt[i]]++; 66 } 67 cout<<"Box"<<endl; 68 for(int i=1;i<=n;i++)if(res[i]) 69 cout<<i<<": "<<res[i]<<endl; 70 } 71 return 0; 72 }