题目描述
i - a[i] != j - a[j]
等价于 i - j != a[i] - a[j]
只需要逆序排列即可
代码
#include<bits/stdc++.h>
using namespace std;
int buf[1000];
int main()
{
int T;scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i = 0 ; i < n ; ++i)
{
scanf("%d",&buf[i]);
}
sort(buf,buf+n,greater<int>());
for(int i =0 ; i < n ; ++i)
printf("%d ", buf[i]);
puts("");
}
}
为什么,就等价于逆序排列了?
可以看一下这个题解,由于其中的 $i$ 是单调递增的,所以如果我们将 $a[i]$ 变为单调递减,那么整个 $i - a[i]$ 便是单调递增的,一定两两不同。所以我们将原数组由大到小排序即可。
🐂
这个证明厉害!
…