solution
- 按照
- ①小于0
- ②大于0小于等于k
- ③大于k
分为三部分,每部分内部以链表内的出现先后为序
#include<iostream>
#include<vector>
using namespace std;
struct node{
int data, next;
}list[100000];
int main(){
int first, n, k, flag = 1, addr;
vector<int> v[3];
scanf("%d%d%d", &first, &n, &k);
while(n--){
scanf("%d", &addr);
scanf("%d%d", &list[addr].data, &list[addr].next);
}
addr = first;
while(addr != -1){
if(list[addr].data < 0) v[0].push_back(addr);
else if(list[addr].data <= k) v[1].push_back(addr);
else v[2].push_back(addr);
addr = list[addr].next;
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < v[i].size(); j++){
if(flag){
printf("%05d %d ", v[i][j], list[v[i][j]].data);
flag = 0;
}
else printf("%05d\n%05d %d ", v[i][j], v[i][j], list[v[i][j]].data);
}
}
printf("-1");
return 0;
}
or
#include<iostream>
#include<vector>
using namespace std;
struct node{
int data, next;
}list[100000];
int main(){
int first, n, k, flag = 1, addr;
vector<int> v[3];
scanf("%d%d%d", &first, &n, &k);
while(n--){
scanf("%d", &addr);
scanf("%d%d", &list[addr].data, &list[addr].next);
}
while(first != -1){
if(list[first].data < 0) v[0].push_back(first);
else if(list[first].data <= k) v[1].push_back(first);
else v[2].push_back(first);
first = list[first].next;
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < v[i].size(); j++){
if(flag){
printf("%05d %d ", v[i][j], list[v[i][j]].data);
flag = 0;
}
else printf("%05d\n%05d %d ", v[i][j], v[i][j], list[v[i][j]].data);
}
}
printf("-1");
return 0;
}