Codeforces Round #500 (Div. 2) C Photo of The Sky

翻译

给你\(2N\)个数字,你可以任意排列,让你排成\(N\)个坐标,问你包含这\(N\)个坐标的矩形大小的最小值。

思路

明确了求的是最小值!找到一个面积最小长方形使得全部点都包含。

本题的精华可以说是:极差

然后我们看一下上面的图片,既然都包含,那么满足啥?我们先讨论最大值和最小值包含在

  • 我们就让点一与点二是全部能构成点中的极差最大的点(要是有比他大的你怎么包含)?
  • 然后,我们确定了长,不过宽不必为极差最。那么我下面讲一下为啥。

因为我们只要将输入的数排个序,以\(N\)为界,左边为横坐标,右边为纵坐标。这样我们只要随便找2个点(位于\(N\)的两侧),然后只要把比宽长的数作为横坐标,短或等于的作为纵坐标就可以啦(因为你的纵坐标在\(N\)的右边,对了别忘了你排顺序了哦)!

还有一种情况,那就是:最大值会在长里,最小值会在宽里,这样我们需要让最大值尽可能的小,最小值尽可能的大,由于排序,不就是\(Easy\)了吗?

于是我们可以总结出做法:先找一个基准数作为最小值(基准数为第二个情况的结果),然后确定长为最大值,枚举宽,更新答案

一定要开long long

用到了一些数学知识,我也不会,好不容易搞懂的,看不懂也没关系。

Code

#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
long long n,a[1000001];
int main()
{
    cin>>n;n*=2;
    for (int i=1; i<=n; i++)
        cin>>a[i];
    sort(a+1,a+n+1);
    long long ans=(a[n/2]-a[1])*(a[n]-a[n/2+1]);//先找到一个基准数,也是第二个情况的结果
    for (int i=2; i<=n/2+1; i++)//枚举并更新答案
        ans=min(ans,(a[i+n/2-1]-a[i])*(a[n]-a[1]));
    cout<<ans;
}

原文地址:https://www.cnblogs.com/lyfoi/p/9485067.html

时间: 2024-09-28 10:40:54

Codeforces Round #500 (Div. 2) C Photo of The Sky的相关文章

Codeforces Round #500 (Div. 2) [based on EJOI]

Codeforces Round #500 (Div. 2) [based on EJOI] https://codeforces.com/contest/1013 A 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define IT set<node>::iterator 6 #def

Codeforces Round #500 (Div. 2) BC

CodeForces 1013B And CodeForces 1013C  Photo of The Sky B 可以发现只有一次与操作是有意义的,所以答案只有-1,0,1,2四种情况 1 #include <bits/stdc++.h> 2 #define show(a) cout << #a << " = " << a << endl; 3 const int MOD = 1e9+7; 4 const int MAXN

Codeforces Round #500 (Div. 2) 游记

A Piles With Stones 题意 有\(N\)堆石子,任意个人.每个人可以把一堆石子中的一个石子移动到另一堆,或者是拿走一堆石子.现在给你石子一开始的情况与这些人进行操作后的情况,问是否合法. 思路 此题看上去不简单,但是你可能在几秒内想出一个结论,那就是:无论这些人怎么移动,都没有办法使得石子数量增多!那么做法就简单了,如果石子数量比没改动前的多,那么就不合法了. Code #include<iostream> using namespace std; int sum1=0,su

Codeforces Round#500 Div.2 翻车记

A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=

Codeforces Round #500 (Div. 2) ABC

A. Piles With Stones 水题略 B. And 题意:让输入一个n,一个下,之后输入一个长为n的数组a,可以在a中使a变为a&x,问经过几次变化数组中有相同的数 思路:当数组中有两个相同的数时直接输出0,注意a&x后的数无论在与x经过几次按位与运算都不会发生变化, 该题有特殊情况,在数据相当大时可能出现错误,因此要ans=min(ans,1或2),在这最后系统wa了,难受emmmmm 知识点补充:只有1&1=1 代码: #include <bits/stdc+

Codeforces Round #500 (Div.1)

题意: A 给你2n个数字,你可以任意排列 让你排成n个坐标 然后让一个平行于坐标轴的矩形包含这n个坐标 问矩形大小的最小值 n<=1e5 B 给你n*m的方格,已知任意三个点如果这样就可以生成另一个点(见下图) 生成的点可以用来生成别的店,之前的三个点也还在 现在给你q个点,问你至少加几个点能经过若干次生成后让整个矩形上所有格子都有点 n,m<=2e5,q<=min(n*m,2e5) C 给你n个地点,如果某个地点比两边严格高那么就可以建一座房子 你可以花1的代价让某个地点高度-1,可

Codeforces Round #500 (Div. 2) D Chemical table

翻译 给你一个图,这个图里面会有一些长方形与正方形,只要他们的四角中的任意三个角有一个\(X\)的话(请饶恕我这么形容),那么他就会在空缺的角形成一个新的\(X\),你可以变出来一个\(X\),给你这个图的大小以及哪里有\(X\),问你至少要变出几个\(X\)才可以使得全图都是\(X\). 思路 不亏是明星团队出的题,代码量不大但是思维坑啊.那么我就不绕了,直接入正题(听说有人五分钟切了这道题?) 这道题熟练图论的人可能会想到办法,按照套路,我们可以把有\(X\)的格子他们的行和列看为两个点,然

Codeforces Round #315 (Div. 1)

A. Primes or Palindromes? time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are too complex and un

Codeforces Round #278 (Div. 2) b

/**  *  * @brief Codeforces Round #278 (Div. 2) b  * @file b.c  * @author mianma  * @created 2014/11/24 17:52  * @edited  2014/11/18 17:52  * @type brute  *   * @note   *          declare k >= 0;  *              then   *                  x1 = k  *