自学内容网 自学内容网

18925 试卷排序(双向链表)

### 思路
1. **初始化队列**:将编号为1的试卷放入队列。
2. **依次插入试卷**:从第2张试卷开始,根据输入的`x`和`p`,将试卷插入到指定位置。
3. **输出结果**:输出最终的试卷序列。

### 伪代码
```
function reorder_papers(N, operations):
    queue = [1]

    for i from 2 to N:
        x, p = operations[i-2]
        index = queue.index(x)
        if p == 0:
            queue.insert(index, i)
        else:
            queue.insert(index + 1, i)

    return queue
```

### C++代码
 

#include <iostream>
#include <vector>
#include <list>
using namespace std;

vector<int> reorder_papers(int N, vector<pair<int, int>>& operations) {
    list<int> queue;
    queue.push_back(1);

    for (int i = 2; i <= N; ++i) {
        int x = operations[i-2].first;
        int p = operations[i-2].second;
        auto it = find(queue.begin(), queue.end(), x);
        if (p == 0) {
            queue.insert(it, i);
        } else {
            queue.insert(next(it), i);
        }
    }

    return vector<int>(queue.begin(), queue.end());
}

int main() {
    int N;
    cin >> N;
    vector<pair<int, int>> operations(N-1);
    for (int i = 0; i < N-1; ++i) {
        cin >> operations[i].first >> operations[i].second;
    }

    vector<int> result = reorder_papers(N, operations);
    for (int num : result) {
        cout << num << " ";
    }
    cout << endl;

    return 0;
}

### 总结
1. **初始化队列**:将编号为1的试卷放入队列。
2. **依次插入试卷**:根据输入的`x`和`p`,将试卷插入到指定位置。
3. **输出结果**:输出最终的试卷序列。


原文地址:https://blog.csdn.net/huang1xiao1sheng/article/details/142898211

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!