BNU Playing Field

来源:互联网 发布:二战中国功劳排名 知乎 编辑:程序博客网 时间:2024/06/05 03:20
#include <iostream>
#include <stdio.h>
#include <string>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <map>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
typedef long long ll;
const int M=50010;
struct node
{
    double x,y;
}p[M];
double det(double a,double b,double c,double d)
{
    return a*d-b*c;
}
double area(node a,node b,node c)
{
    return 0.5*fabs(det(c.x-a.x,c.y-a.y,c.x-b.x,c.y-b.y));
}
double  sum[M];
int main()
{
    int n,m;
    bool you=false;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0&&m==0)break;
        if(you)puts("");
        you=true;
        for(int i=0;i<n;i++)
        {
            scanf("%lf%lf",&p[i].x,&p[i].y);
        }
        memset(sum,0,sizeof(sum));
        for(int i=2;i<n;i++)
        {
            sum[i]=sum[i-1]+area(p[0],p[i-1],p[i]);
        }
        int a,b;
        while(m--)
        {
            scanf("%d%d",&a,&b);
            double sum1=sum[b]-sum[a]-area(p[0],p[a],p[b]);
            double sum2=sum[n-1]-sum1;
            if(sum2<sum1)
            sum1=sum2;
            printf("%.1lf\n",sum1);
        }
    }
    return 0;
}

原创粉丝点击