双向链表后三个TLE求助
查看原帖
双向链表后三个TLE求助
741665
CoderMeow楼主2023/1/25 19:51

代码:

# include <cstdio>
# include <vector>

using namespace std;

struct student {
    int num;
    int pre, next;
};

int main() {
    int N;
    scanf("%d", &N);

    vector<student> queue(N + 1);
    queue[0].num = 0;
    queue[0].next = 1;
    queue[1].num = 1;
    queue[1].pre = 0;

    for (int number = 2; number <= N; ++number) {
        int k, p;
        scanf("%d %d", &k, &p);

        student present = queue[0];
        while (present.num != k) {
            present = queue[present.next];
        }

        queue[number].num = number;
        if (p == 0) {
            queue[present.pre].next = number;
            queue[number].pre = queue[present.pre].num;
            queue[number].next = present.num;
            queue[present.num].pre = number;
        } else {
            queue[number].next = present.next;
            queue[present.next].pre = number;
            queue[present.num].next = number;
            queue[number].pre = present.num;
        }
    }

    int M;
    scanf("%d", &M);

    for (int i = 0; i < M; ++i) {
        int x;
        scanf("%d", &x);

        student present = queue[0];
        for (int j = 0; j < N ; ++j) {
            present = queue[present.next];

            if (present.num == x) {
                queue[present.next].pre = present.pre;
                queue[present.pre].next = present.next;
                --N;
            }
        }
    }

    student outPres = queue[0];
    for (int i = 0; i < N; ++i) {
        outPres = queue[outPres.next];
        printf("%d ", outPres.num);
    }

    return 0;
}

说明

struct实现每个学生的结构体,双向链表存储pre和next,前两个没问题但后三个TLE(已开O2),有没有哪里可以优化

2023/1/25 19:51
加载中...