题目:
时间限制:2s 内存限制:256 MB
给您一个数组
a_1,a_2,…,a_n.
如果对于每对索引
i<j
条件 j-a_j != i-a_i 成立,则认为数组是好数组。
您可以重组这个数组以使其变成好数组吗? 重组数组意味着可以对其元素进行任意重新排序。
例如,如果a=[1,1,3,5],则重组的数组[1,3,5,1],[3,5,1,1]和[5,3,1,1] 都是好数组 ,但重组后的数组[3,1,5,1],[1,1,3,5] 和 [1,1,5,3] 并非如此。
保证总是可以对数组进行重组以满足此条件。
输入
第一行包含一个整数 n—数组 a 的长度。
第二行包含 n 个整数 a_1,a_2,…,a_n
输出
打印任意一种重组之后的好数组
样例
输入 1
1
7
输出 1
7
输入 2
4
1 1 3 5
输出 2
1 5 1 3
提示
对于100% 的数据:
1≤n≤10000,1≤a_i
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i)
{
cin >> a[i];
}
struct EW
{
int ele;
int diff;
};
vector<EW> EWD;
for (int i = 0; i < n; ++i)
{
EW ew;
ew.ele = a[i];
ew.diff = i - a[i];
EWD.push_back(ew);
}
for (int i = 0; i < n - 1; ++i)
{
for (int j = i + 1; j < n; ++j)
{
if (EWD[i].diff > EWD[j].diff)
{
swap(EWD[i], EWD[j]);
}
}
}
for (int i = 0; i < n; ++i)
{
cout << EWD[i].ele << " ";
}
return 0;
}
错误原因:要么解答错误要么超时