站外题求助
  • 板块灌水区
  • 楼主bilibili_daogu
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/23 18:23
  • 上次更新2024/11/23 20:52:39
查看原帖
站外题求助
757292
bilibili_daogu楼主2024/11/23 18:23

题目:

时间限制: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;
}

错误原因:要么解答错误要么超时

2024/11/23 18:23
加载中...