#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
struct node {
int add, key, next;
};
bool comp(node n1, node n2);
int binarysearch(node arr[], int n, int add);
inline void swap(node &n1, node &n2);
int main(void) {
int n, k, i, j, l, start;
node *arr1, *arr2;
scanf("%d %d %d", &start, &n, &k);
arr1 = new node[n];
arr2 = new node[n];
for (i = 0; i < n; i++) {
scanf("%d %d %d", &arr1[i].add, &arr1[i].key, &arr1[i].next);
}
sort(arr1, arr1 + n, comp);
int now = start, index, cnt = 0;
while (now != -1) {
index = binarysearch(arr1, n, now);
arr2[cnt] = arr1[index];
cnt++;
now = arr1[index].next;
}
for (i = 0; i <= cnt - k; i += k) {
for (j = i, l = i + k - 1; j < l; j++, l--) {
swap(arr2[j], arr2[l]);
}
}
for (i = 0; i < cnt - 1; i++) {
arr2[i].next = arr2[i + 1].add;
}
arr2[i].next = -1;
for (i = 0; i < cnt - 1; i++) {
printf("%05d %d %05d\n", arr2[i].add, arr2[i].key, arr2[i].next);
}
printf("%05d %d %d\n", arr2[i].add, arr2[i].key, arr2[i].next);
delete[] arr1;
delete[] arr2;
return 0;
}
bool comp(node n1, node n2) {
return n1.add < n2.add;
}
int binarysearch(node arr[], int n, int add) {
int left, mid, right;
left = 0;
right = n - 1;
while (left <= right) {
mid = (left + right) >> 1;
if (arr[mid].add > add) {
right = mid - 1;
}
else if (arr[mid].add < add) {
left = mid + 1;
}
else {
return mid;
}
}
return -1;
}
inline void swap(node &n1, node &n2) {
node tmp = n1;
n1 = n2;
n2 = tmp;
return;
}
1074. Reversing Linked List (25)解题报告
最新推荐文章于 2018-08-11 15:20:05 发布