【题解】内部矛盾
题意
给你一个长度为的数组
,你可以将其重排,使重排结果中对于任意的
有
。任意输出一个重排结果即可。
题解
由于要重排结果,使得没有两个下标减去其数字是相等的。那么考虑对数组从大到小排序后输出。证明如下:
若有
则有
两边同时减去,有
我们对比一下和
的大小,会发现
,所以有
。即
两边乘上一个负号有
所以肯定能保证
所以只用从大到小重排即可。
复杂度
时间复杂度
代码
#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; }