• Gym


    Ignacio is a famous mathematician, some time ago he was married with Dolly, a famous scientific, at that time they bought a huge piece of land that they would use to construct a national university, they chose the land with the following property: if someone walks straight from any place inside the land to any other place inside the land then all that path would be inside the land, that's because they wanted that people could go from any point of the university to another as fast as possible.

    Sadly, today Ignacio and Dolly are getting divorced, so they need to divide the land in two parts, to be fair with this division Dolly will give to Ignacio a list consisting of many different pairs of corners of the land, because governmental laws only permit to divide a land using corners of that land. Then, after dolly makes the list Ignacio will choose one pair of corners from that list and then they will divide the land with a straight wall from one of the corners to the other, the area of this wall is zero. Finally, Dolly will take the part with the biggest area.

    For example, the image below corresponds to a land with coordinates (0, 0), (1,-1), (3, -1), (4, 0), (4, 2), (3, 3), (1, 3) and (0, 2) in that order, then Dolly made a list with 3 options, for the first one she chose corners with indexes 2 and 5, for the second she chose corners 7 and 3 and for the last she chose corners 4 and 7. In each case the shaded area corresponds to the area that would correspond to Ignacio if he chooses that option from the list.

    You are hired from Ignacio to help him see which is the maximum area possible of the land he can have.


    Input

    The first line of input contains 2 numbers n(3 ≤ n ≤ 105) and m(2 ≤ m ≤ 105) - the numbers of corners of the land and the number of pairs in the list of Dolly respectively

    Next n lines follow, the i-th of these lines contains xi and yi ( - 108 ≤ xi, yi ≤ 108) - the i-th coordinate of a corner from the land.

    Finally, m lines follow, the i-th of these lines contains pi and qi (1 ≤ pi, qi ≤ n, pi ≠ qi) - the i-th pair of the corners in the list from dolly. It is guaranteed that all pairs are different and that there are no 3 co-linear corners in the land.

    Output

    Print a single number - the maximum area of the land that Ignacio could keep for himself.

    You answer is considered correct, if its absolute or relative error does not exceed 10 - 4

    Examples
    Input
    4 2
    0 0
    0 100
    100 100
    100 0
    1 3
    4 2
    Output
    5000.000000
    Input
    8 3
    0 0
    1 -1
    3 -1
    4 0
    4 2
    3 3
    1 3
    0 2
    2 5
    3 7
    4 7
    Output
    7.000000

    维护一下面积的前缀和即可;
    注意多边形面积的公式:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<map>
    #include<set>
    #include<vector>
    #include<queue>
    #include<bitset>
    #include<ctime>
    #include<deque>
    #include<stack>
    #include<functional>
    #include<sstream>
    //#include<cctype>
    //#pragma GCC optimize(2)
    using namespace std;
    #define maxn 200005
    #define inf 0x7fffffff
    //#define INF 1e18
    #define rdint(x) scanf("%d",&x)
    #define rdllt(x) scanf("%lld",&x)
    #define rdult(x) scanf("%lu",&x)
    #define rdlf(x) scanf("%lf",&x)
    #define rdstr(x) scanf("%s",x)
    typedef long long  ll;
    typedef unsigned long long ull;
    typedef unsigned int U;
    #define ms(x) memset((x),0,sizeof(x))
    const long long int mod = 1e9 + 7;
    #define Mod 1000000000
    #define sq(x) (x)*(x)
    #define eps 1e-4
    typedef pair<int, int> pii;
    #define pi acos(-1.0)
    //const int N = 1005;
    #define REP(i,n) for(int i=0;i<(n);i++)
    typedef pair<int, int> pii;
    inline ll rd() {
    	ll x = 0;
    	char c = getchar();
    	bool f = false;
    	while (!isdigit(c)) {
    		if (c == '-') f = true;
    		c = getchar();
    	}
    	while (isdigit(c)) {
    		x = (x << 1) + (x << 3) + (c ^ 48);
    		c = getchar();
    	}
    	return f ? -x : x;
    }
    
    ll gcd(ll a, ll b) {
    	return b == 0 ? a : gcd(b, a%b);
    }
    int sqr(int x) { return x * x; }
    
    
    /*ll ans;
    ll exgcd(ll a, ll b, ll &x, ll &y) {
    	if (!b) {
    		x = 1; y = 0; return a;
    	}
    	ans = exgcd(b, a%b, x, y);
    	ll t = x; x = y; y = t - a / b * y;
    	return ans;
    }
    */
    
    
    int n, m;
    struct node {
    	double x, y;
    }pot[maxn];
    
    double pre[maxn];
    int main() {
    	//   ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    	cin >> n >> m;
    	for (int i = 1; i <= n; i++)rdlf(pot[i].x), rdlf(pot[i].y);
    	for (int i = 1; i < n; i++) {
    		pre[i] = pre[i - 1] + 1.0*(pot[i].x*pot[i + 1].y - pot[i + 1].x*pot[i].y);
    	}
    	double sum = fabs(pre[n - 1] - pot[1].x*pot[n].y + pot[n].x*pot[1].y) / 2.0;
    	double maxx = -1.0*inf;
    	while (m--) {
    		int x, y; rdint(x); rdint(y);
    		if (x > y)swap(x, y);
    		double sum1 = fabs(pre[y - 1] - pre[x - 1] - pot[x].x*pot[y].y + pot[y].x*pot[x].y) / 2.0;
    		maxx = max(maxx, min(sum1, sum - sum1));
    	}
    	printf("%.8lf
    ", 1.0*maxx);
    	return 0;
    }
    
    
    
    EPFL - Fighting
  • 相关阅读:
    软件文档管理指南GB/T 16680—1996
    软件工程-产品质量
    中间件
    风险应对策略
    激励理论
    风险识别方法
    winform与js互操作
    训练报告 (2014-2015) 2014, Samara SAU ACM ICPC Quarterfinal Qualification Contest
    专题:DP杂题1
    18春季训练01-3/11 2015 ACM Amman Collegiate Programming Contest
  • 原文地址:https://www.cnblogs.com/zxyqzy/p/10300746.html
Copyright © 2020-2023  润新知