CodeForces

题目链接:

https://vjudge.net/problem/1735276/origin

题目大意与思路:

题目的基本意思就是求一个矩形的最小面积。

这个可以用最大最小值, 将他们分为X和Y组。但是最大最小值有一个特殊情况,就是最大值和最小值在同一个组里,比如都在X组里

然后排序

这种情况我们可以确定一条边是x = a[2*n]-a[1]则需要我们用一个tm

现在只需要我们用这一条边乘上连续n进行比较,取最小值

下面是AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#define ll long long

using namespace std;
const int MX = 2e5+10;
ll a[MX];

int main()
{
    ll ans = 0;
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= 2*n; ++i) scanf("%lld", &a[i]);
    sort(a+1, a+2*n+1);
    ans = (a[2*n]-a[n+1])*(a[n]-a[1]); //若最大最小值分别在x和y上
    ll tmp = 0;
    for(int i = 2; i <= n; ++i)
    {
        tmp = a[n+i-1] - a[i]; // 若最大最小值都在x或y上,从2开始找连续n的边与已知乘法运算
        ans = min(ans, tmp*(a[2*n]-a[1]));
    }
    printf("%lld
", ans);
}
View Code

如有疑问,欢迎评论指出!

化繁为简 大巧不工
原文地址:https://www.cnblogs.com/mpeter/p/10300031.html