题解 | #最小的数字#
最小的数字
https://ac.nowcoder.com/acm/contest/57683/A
//tmd真的就tmd
其实看懂第三行那个条件就好了,元素差值越大距离就要越大,那么直接排序后判断即可
如果前后两个元素的差值小于它们的距离即1,那么其他元素跟当前枚举的元素就更不符合题意,也就无法交换,直接判定该序列不合法
反之如果前后两个元素的差值都大于等于它们的距离即1,那么其他元素也必然符合
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int main()
{
int t; cin>>t;
while(t--){
int n; cin>>n;
for(int i=1; i<=n; i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
bool f = true;
for(int i=1; i<n; i++){
if(a[i+1]-a[i]<1){
f = false;
break;
}
}
if(!f) cout<<-1<<endl;
else{
for(int i=1; i<=n; i++)
cout<<a[i]<<' ';
cout<<endl;
}
}
return 0;
}