程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 11072 - Points

11072 - Points

編輯:C++入門知識

print?#include<iostream>  
#include<algorithm>  
using namespace std; 
struct point 
{double x;double y; 
point(double x=0, double y=0):x(x),y(y){} 
}p[100005],a,ch[100005]; 
 
typedef point vector; 
 
vector operator-(point a,  point b){return vector(a.x-b.x,a.y-b.y);} 
double cross(vector a, vector b){return a.x*b.y-a.y*b.x;} 
bool operator<(const point& a,const point& b){return a.x<b.x||(a.x==b.x&&a.y<b.y);}   
 
int convexhull(point *p,int n,point *ch) 

    sort(p,p+n); 
    int m=0; 
    for(int i=0;i<n;i++) 
    { 
        while(m>1&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) 
            m--; 
        ch[m++]=p[i]; 
    } 
    int k=m; 
    for(int i=n-2;i>=0;i--) 
    { 
        while(m>k&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0)     
            m--; 
        ch[m++]=p[i]; 
    } 
    if(n>1) m--; 
    return m; 

 
int main() 

    int n,t; 
    while(cin>>n) 
    { 
        for(int i=0;i<n;i++) 
            cin>>p[i].x>>p[i].y; 
        int m=convexhull(p,n,ch); 
        cin>>t; 
        while(t--) 
        { 
            cin>>a.x>>a.y; 
            for(int i=0;i<m;i++) 
                if(cross(ch[i+1]-ch[i],a-ch[i])<0)  
                    goto out; 
            cout<<"inside"<<endl; 
            continue; 
out:    cout<<"outside"<<endl; 
        } 
    } 
    return 0; 

#include<iostream>
#include<algorithm>
using namespace std;
struct point
{double x;double y;
point(double x=0, double y=0):x(x),y(y){}
}p[100005],a,ch[100005];

typedef point vector;

vector operator-(point a,  point b){return vector(a.x-b.x,a.y-b.y);}
double cross(vector a, vector b){return a.x*b.y-a.y*b.x;}
bool operator<(const point& a,const point& b){return a.x<b.x||(a.x==b.x&&a.y<b.y);} 

int convexhull(point *p,int n,point *ch)
{
 sort(p,p+n);
 int m=0;
 for(int i=0;i<n;i++)
 {
  while(m>1&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0)
   m--;
  ch[m++]=p[i];
 }
 int k=m;
 for(int i=n-2;i>=0;i--)
 {
  while(m>k&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) 
   m--;
  ch[m++]=p[i];
 }
 if(n>1) m--;
 return m;
}

int main()
{
 int n,t;
 while(cin>>n)
 {
  for(int i=0;i<n;i++)
   cin>>p[i].x>>p[i].y;
  int m=convexhull(p,n,ch);
  cin>>t;
  while(t--)
  {
   cin>>a.x>>a.y;
   for(int i=0;i<m;i++)
    if(cross(ch[i+1]-ch[i],a-ch[i])<0)
     goto out;
   cout<<"inside"<<endl;
   continue;
out: cout<<"outside"<<endl;
  }
 }
 return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved