1052. Linked List Sorting (25)解题报告

来源:互联网 发布:windows易升 编辑:程序博客网 时间:2024/05/13 17:24
#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>#define N 100000using namespace std;struct node {    int address, key, next;};int comp(node n1, node n2);int comp2(node n1, node n2);int binarysearch(node arr[], int n, int target);int main(void) {    int n, head, i, index, n2;    node *arr = new node[N], *arr2 = new node[N];    setvbuf(stdin, new char[1 << 20], _IOFBF, 1 << 20);    setvbuf(stdout, new char[1 << 20], _IOFBF, 1 << 20);    scanf("%d %d", &n, &head);    for (i = 0; i < n; i++) {        scanf("%d %d %d", &arr[i].address, &arr[i].key, &arr[i].next);    }    sort(arr, arr + n, comp);    i = 0;    while (head != -1) {        index = binarysearch(arr, n, head);        arr2[i++] = arr[index];        head = arr[index].next;    }    n2 = i;    sort(arr2, arr2 + n2, comp2);    for (i = 0; i < n2 - 1; i++) {        arr2[i].next = arr2[i + 1].address;    }    arr2[i].next = -1;    if (n2 > 0) {        printf("%d %05d\n", n2, arr2[0].address);        for (i = 0; i < n2 - 1; i++) {            printf("%05d %d %05d\n", arr2[i].address, arr2[i].key, arr2[i].next);        }        printf("%05d %d %d", arr2[i].address, arr2[i].key, arr2[i].next);    }    else {        printf("%d %d", n2, -1);    }    delete[] arr;    delete[] arr2;    return 0;}int comp(node n1, node n2) {    return n1.address < n2.address;}int comp2(node n1, node n2) {    return n1.key < n2.key;}int binarysearch(node arr[], int n, int target) {    int left, mid, right;    left = 0;    right = n - 1;    while (left <= right) {        mid = (left + right) >> 1;        if (arr[mid].address > target) {            right = mid - 1;        }        else if (arr[mid].address < target) {            left = mid + 1;        }        else {            return mid;        }    }    return -1;}
0 0
原创粉丝点击