1133 Splitting A Linked List (25分)

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");
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/107279585
今日推荐