其他分享
首页 > 其他分享> > CF135A Replacement 题解

CF135A Replacement 题解

作者:互联网

Content

有 \(n\) 个数 \(a_1,a_2,a_3,...,a_n\),试用 \(1\) ~ \(10^9\) 之间的数(除了本身)代替其中的一个数,使得这 \(n\) 个数的总和最小,并将数组按照非降序输出。

数据范围:\(1\leqslant n\leqslant 10^5,1\leqslant a_i\leqslant 10^9\)。

Solution

首先我们排序一遍之后就可以找到最大的数,然后很显然,修改得要从最大的数入手。

然后我们需要分类讨论一下:

  1. 当最大的数为 \(1\),此时需要将这个最大的数修改为 \(2\) 才能符合要求。
  2. 否则,直接将最大的数修改为 \(1\) 即可。

修改完之后再排序一遍即可得到我们需要的数组。

Code

#include <cstdio>
#include <algorithm>
using namespace std;

int n, a[100007];

int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i)
		scanf("%d", &a[i]);
	sort(a + 1, a + n + 1);
	a[n] = (a[n] == 1 ? 2 : 1);
	sort(a + 1, a + n + 1);
	for(int i = 1; i <= n; printf(" "), ++i)
		printf("%d", a[i]);
}

标签:10,最大,CF135A,int,题解,修改,include,leqslant,Replacement
来源: https://www.cnblogs.com/Eason-AC/p/15717025.html