poj3348

来源:互联网 发布:securecrt mac破解版 编辑:程序博客网 时间:2024/06/01 09:09
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#define eps 1e-8#define MAX 1000using namespace std;int n,stack[MAX];struct wbysr_point{int x,y;}a[MAX];bool cmp(wbysr_point a1,wbysr_point a2){if(a1.x!=a2.x)return a1.x<a2.x;elsereturn a1.y<a2.y;}double cross(wbysr_point a1,wbysr_point a2,wbysr_point a3)  {      return(a1.x-a3.x)*(a2.y-a3.y)-(a2.x-a3.x)*(a1.y-a3.y);  }bool cmp2(int a1,int a2){return a[a1].x<a[a2].x;}double crossx(wbysr_point a1,wbysr_point a2){return a1.x*a2.y-a1.y*a2.x;}int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);sort(a+1,a+n+1,cmp);//for(int i=1;i<=n;i++)//printf("%d %d %d \n",i,a[i].x,a[i].y);int stack_num=0;for(int i=1;i<=n;i++){while(cross(a[stack[stack_num]],a[i],a[stack[stack_num-1]])<=0&&stack_num>1)stack_num--;stack[++stack_num]=i;}int len=stack_num;//for(int i=1;i<=len;i++)//printf("%d\n",stack[i]);//printf("\n");for(int i=n-1;i>=1;i--){while(stack_num>len&&cross(a[stack[stack_num]],a[i],a[stack[stack_num-1]])<=0)stack_num--;stack[++stack_num]=i;}if(n>1)stack_num--;//for(int i=0;i<stack_num;i++)//printf("%d %d\n",a[stack[i]].x,a[stack[i]].y);//sort(stack+1,stack+1+stack_num,cmp2);double ans=0;for(int i=1;i<=stack_num;i++)ans+=0.5*(cross(a[stack[i]],a[stack[i+1]],a[stack[0]]));//ans+=0.5*(a[stack[i]]-a[stack[0]],a[stack[i-1]]=a[stack[0]]);//printf("%.3lf\n",ans);int ans_=ans/50;//if(ans_*50>ans)//ans_--;//printf("\n");//printf("%.2lf\n",ans);printf("%d\n",ans_);return 0;}

求凸包的面积,调了一早晨。。。
0 0
原创粉丝点击