穿胖次的夏雨来 2019-12-07 09:50 采纳率: 16.7%
浏览 558

C++题目,还原数列,知道每个数之前有多少个比它小的数,求原先的数列,求大神解答!

【问题描述】
给定1~N的某个排列,可以很容易求出每个数之前有多少个比它小的数。
但反过来,如果知道每个数之前有多少个比它小的数,能否求出原先的排列呢?

【输入数据】(sequence.in)

第一行,N(1<=N<=100)

第二行,N个数,分别表示每个数之前有多少个比它小的数。

【输出数据】(sequence.out)

一行,N个数为所求的原先排列

输入样例

4

0 1 2 1

【样例输出】

1 3 4 2

  • 写回答

3条回答 默认 最新

  • 非弋 2019-12-15 13:10
    关注
    int num = 6;    // N
    vector<int> vecNum(num);    // 1, 2, ..., N 
    for (int i = 0; i < num; i++){
        vecNum[i] = i + 1;
    }
    
    vector<int> vecInput(num);  // input
    vecInput[0] = 0;
    vecInput[1] = 0;
    vecInput[2] = 1;
    vecInput[3] = 2;
    vecInput[4] = 4;
    vecInput[5] = 0;
    
    vector<int> vecOutput(num); // output
    vector<int>::reverse_iterator itOutput = vecOutput.rbegin();
    for (vector<int>::reverse_iterator itInput = vecInput.rbegin(); itInput != vecInput.rend(); itInput++) {
        *itOutput++ = vecNum[*itInput];
        vecNum.erase(vecNum.begin() + *itInput);
    }
    
    // print
    for (vector<int>::iterator it = vecOutput.begin(); it != vecOutput.end(); it++) {
        cout << *it << endl;
    }
    
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器