【题解】内部矛盾

题意

给你一个长度为的数组,你可以将其重排,使重排结果中对于任意的。任意输出一个重排结果即可。

题解

由于要重排结果,使得没有两个下标减去其数字是相等的。那么考虑对数组从大到小排序后输出。证明如下:
若有
则有
两边同时减去,有
我们对比一下的大小,会发现,所以有。即
两边乘上一个负号有
所以肯定能保证
所以只用从大到小重排即可。

复杂度

时间复杂度

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e2+5;
int a[N];
int main(){
    int t,n,i;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        for(i=n-1;i>=0;i--)
            i!=0?printf("%d ",a[i]):printf("%d\n",a[i]);
    }
    return 0;
}
全部评论

相关推荐

05-16 11:16
已编辑
东华理工大学 Java
牛客73769814...:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
牛客创作赏金赛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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