1133 Splitting A Linked List (25分)
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
int data, next, pos, rank, address;
bool inlist;
}m[100010];
bool cmp(node a, node b)
{
if(a.inlist != b.inlist)
return a.inlist > b.inlist;
else if(a.rank != b.rank)
return a.rank < b.rank;
else
return a.pos < b.pos;
}
int main()
{
int head, n, k, address;
scanf("%d%d%d", &head, &n, &k);
for(int i = 0; i < n; i++)
{
scanf("%d", &address);
scanf("%d%d", &m[address].data, &m[address].next);
m[address].address = address;
}
int p = head, cnt = 0;
while(p != -1)
{
m[p].inlist = true;
if(m[p].data < 0)
m[p].rank = 1;
else if(m[p].data >= 0 && m[p].data <= k)
m[p].rank = 2;
else if(m[p].data > k)
m[p].rank = 3;
m[p].pos = ++cnt;
p = m[p].next;
}
sort(m, m+100010, cmp);
for(int i = 0; i < cnt; i++)
{
printf("%05d %d", m[i].address, m[i].data);
if(i < cnt-1)
printf(" %05d\n", m[i+1].address);
else
printf(" -1\n");
}
}