CodeForce-500C-Photo of The Sky最小矩形面积

xiaoxiao2021-08-29  1.3K+

题目传送门 题意: 给定2*n个坐标,让你组成n个坐标,满足条件:找到一个矩形,所有点都在矩形内(包括边界)。然后求矩形面积的最小值。 思路: 首先想到的一种特殊情况就是,如果有一个数至少出现了n次,则面积为0。但是下面的思路将这种特殊情况包含了。这种自己想到一种特殊情况不如一般性结论思维完整性高。 但是我们要从变量中找出不变量,也就是最大值和最小值一定属于边界的顶点处。 第一种就是min和max是对角线位置。然后就是那个乘法,可以证明当min和max是对角巷位置(也就是x,y坐标)这就是最小的。 还有一种情况就是一个坐标是min到max全覆盖,另外一个坐标是从中间选取相邻的n个,然后从2开始遍历到n。 另外INF要设置到LL的最大值,否则会太小。结果会是LL。 这种自己想到一种特殊情况不如一般性结论思维完整性高。 于变中找不变。

AC code: #include<iostream> #include<cstdio> #include<vector> #include<bitset> #include<stack> #include<set> #include<queue> #include<map> #include<cmath> #include<string> #include<cstring> #include<ctime> #include<fstream> #include<cstdlib> #include<algorithm> using namespace std; //#define pii pair<int, int> #define pb push_back #define mem(a,b) memset(a,b,sizeof(a)) #define per(i,a,b) for(int i=a;i<=b;i++) #define rep(i,a,b) for(int i=a;i>=b;i--) #define all(x) x.begin(),x.end() #define PER(i,x) for(auto i=x.begin();i!=x.end();i++) #define PI acos(-1.0) #define INF 1e18//不能定义为0x3f3f3f3f//相对于LL太小了 typedef long long LL; typedef pair<int,int> pii; const double eps=1.0e-5; const int maxn=3e5 + 10; int dx[4] = {0,0,-1,1}; int dy[4] = {1,-1,0,0}; int n = 0; LL a[maxn]; void solve(){ sort(a+1,a+2*n+1); LL minv = INF; minv = min(minv,(a[n] - a[1]) * (a[2*n] - a[n+1])); per(i,2,n){ minv = min(minv , (a[2*n]-a[1])*(a[i+n-1] - a[i])); } printf("%I64d\n",minv); } int main(){ #ifndef ONLINE_JUDGE //freopen("a.txt","r",stdin); #endif while(~scanf("%d",&n)){ a[0] = 0; per(i,1,2*n){//之前没有看题目,是2*n,而不是n scanf("%I64d",&a[i]); } solve(); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-4823576.html

最新回复(0)