⬆︎
×

[PAT-A] 1074 Reversing Linked List

Hyplus目录

Java

测试点5超时

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    static final int N = 100010;

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String[] firstLine = reader.readLine().split(" ");
        int h = Integer.parseInt(firstLine[0]);
        int n = Integer.parseInt(firstLine[1]);
        int m = Integer.parseInt(firstLine[2]);

        int[] e = new int[N];
        int[] ne = new int[N];

        for (int i = 0; i < n; i++) {
            String[] nodeInfo = reader.readLine().split(" ");
            int address = Integer.parseInt(nodeInfo[0]);
            int data = Integer.parseInt(nodeInfo[1]);
            int next = Integer.parseInt(nodeInfo[2]);
            e[address] = data;
            ne[address] = next;
        }

        List<Integer> q = new ArrayList<>();
        for (int i = h; i != -1; i = ne[i]) {
            q.add(i);
        }

        for (int i = 0; i + m - 1 < q.size(); i += m) {
            Collections.reverse(q.subList(i, i + m));
        }

        for (int i = 0; i < q.size(); i++) {
            System.out.printf("%05d %d ", q.get(i), e[q.get(i)]);
            if (i + 1 == q.size()) {
                System.out.println("-1");
            } else {
                System.out.printf("%05d\n", q.get(i + 1));
            }
        }

        reader.close();
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 100010;

int n, m;
int h, e[N], ne[N];

int main() {
    scanf("%d%d%d", &h, &n, &m);

    for (int i = 0; i < n; i++) {
        int address, data, next;
        scanf("%d%d%d", &address, &data, &next);
        e[address] = data, ne[address] = next;
    }

    vector<int> q;
    for (int i = h; i != -1; i = ne[i]) q.push_back(i);

    for (int i = 0; i + m - 1 < q.size(); i += m)
        reverse(q.begin() + i, q.begin() + i + m);

    for (int i = 0; i < q.size(); i++) {
        printf("%05d %d ", q[i], e[q[i]]);
        if (i + 1 == q.size()) puts("-1");
        else printf("%05d\n", q[i + 1]);
    }

    return 0;
}

发表评论