当前位置: 首页> 教育> 高考 > 求极差(range)

求极差(range)

时间:2025/7/10 10:38:59来源:https://blog.csdn.net/cmh20120102/article/details/139480892 浏览次数:0次

题目描述

小红拿到了一个数组,其中每个元素都是素数。小红准备进行若干次以下操作:

选择两个素数元素,将他们合并,生成的新元素为原来两个素数的乘积。

现在小红希望操作到不能再操作为止,然后使得最终的极差(最大值减最小值)尽可能小。你能帮帮她吗?

输入格式

第一行输入一个正整数 n n n,代表小红拿到的数组。

第二行输入 n n n个正整数 a i ​ a_i​ ai,代表数组中的元素。保证 a i a_i ai​是素数。

输出格式

一个整数,代表合并后的数组的极差。

样例 #1

样例输入 #1

4
2 3 5 3

样例输出 #1

1

提示

合并两次,分别合并2,5以及3,3,形成的数组是[9,10],极差是10-9=1。

数据范围

1 ≤ n ≤ 1 0 5 1≤n≤10^5 1n105

2 ≤ a i ​ ≤ 1 0 9 2≤a_i​≤10^9 2ai109

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
long long a[N];
int main() {int n;cin >> n;for (int i = 0; i < n; i++)cin >> a[i];sort(a, a + n);int l = 0, r = n - n % 2 - 1;//偶数的情况long long mi = 1e18, ma = 0;while (l < r) {//最小的跟最大的,第二小跟第二大......mi = min(mi, a[l] * a[r]);ma = max(ma, a[l] * a[r]);l++;r--;}if (n & 1) {//奇数个时的情况mi = min(mi, a[n - 1]);ma = max(ma, a[n - 1]);}cout << ma - mi;return 0;
}
关键字:求极差(range)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: