FZU2148计算几何,暴力搜索

来源:互联网 发布:php卡盟网站源码 编辑:程序博客网 时间:2024/05/19 13:22
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;long long T;long long N;struct point{long long x,y;point(long long x,long long y){this->x=x;this->y=y;}point(){x=y=0;}}P[100];typedef point Vector;Vector operator-(Vector &a,Vector &b){return Vector(a.x-b.x,a.y-b.y);}long long operator^(Vector a,Vector b){return a.x*b.y-a.y*b.x;}//判断j,k是否在pi的两边bool cut(long long i,long long j,long long k,long long p){Vector v=P[i]-P[p];if(((P[j]-P[i])^v)*((P[k]-P[i])^v)<0)return true;else return false;} //判断p是否在三角形ijk的中间 bool deny(long long i,long long j,long long k,long long p){long long c=0;c+=cut(i,j,k,p);c+=cut(j,k,i,p);c+=cut(k,i,j,p);if(c==3)return true;else return false;}bool hull(long long i,long long j,long long k,long long p){if(deny(i,j,k,p))return false;if(deny(j,k,p,i))return false;if(deny(k,p,i,j))return false;if(deny(p,j,i,k))return false;return true;}int  main(){//freopen("in.txt","r",stdin);cin>>T;for(long long t=1;t<=T;t++){cin>>N;for(long long i=0;i<N;i++){cin>>P[i].x>>P[i].y;}long long ans=0;for(long long i=0;i<N;i++){for(long long j=i+1;j<N;j++){for(long long k=j+1;k<N;k++){for(long long p=k+1;p<N;p++){if(hull(i,j,k,p))ans++;}}}}cout<<"Case "<<t<<": ";cout<<ans<<endl;}return 0;}

0 0