uva 5108

来源:互联网 发布:电视剧数据上海一家人 编辑:程序博客网 时间:2024/05/17 03:34

 题目:点我看题目

题意:给出一个凸多边形每次询问给出两点要求此两点的连线将此多边形分分割的两个部分面积的最小值

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<list>#include<vector>using namespace std;const int maxn=50010;struct Node{double x,y;}A[maxn];double sum[maxn];int main(){int n,i,j,k,a,b,q;bool falg=false;while(scanf("%d%d",&n,&q),n||q){if(falg)printf("\n");falg=true;sum[0]=0.0;for(i=0;i<n;++i){scanf("%lf%lf",&A[i].x,&A[i].y);}double ans=0;for(i=0;i<n;++i){ans=ans+(A[i].x*A[(i+1)%n].y-A[i].y*A[(i+1)%n].x);sum[i+1]=sum[i]+(A[i].x*A[(i+1)%n].y-A[i].y*A[(i+1)%n].x);}ans=fabs(ans/2.0);while(q--){scanf("%d%d",&a,&b);double area=sum[b]-sum[a];area=area+(A[b].x*A[a].y-A[b].y*A[a].x);area=fabs(area/2.0);printf("%.1lf\n",min(area,ans-area));}}return 0;} 


0 0
原创粉丝点击