题解 | #最小的数字#

最小的数字

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;
}
全部评论

相关推荐

04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务