题目链接
被测试点4卡了好久,这里说一下测试点4
00100 9 10
66666 17 11111//注意这里的这个测试数据和其他数据没有任何关联,所以给的n里面是多一个的
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int Max=100000;
struct node
{
int address;
int data;
int next;
int num;
};
node ans[Max];
bool cmp(node a,node b)//排序
{
return a.num<b.num;
}
int begin1,n,k;
int main()
{
cin>>begin1>>n>>k;
for(int i=0;i<=Max;i++)
{
ans[i].num=Max;//令每个结点的num为最大值,方便后面做排序
}
for(int i=0;i<n;i++)
{
int address;
cin>>address;
cin>>ans[address].data>>ans[address].next;//以地址作为数组的位置方便读取
ans[address].address=address;
}
int cnt=0;
int j=0;
for(int i=begin1;i!=-1;i=ans[i].next)
{
if(ans[i].data<0)
{
ans[i].num=cnt++;//小于0的部分,cnt作为排序的依据
}
}
for(int i=begin1;i!=-1;i=ans[i].next)
{
if(ans[i].data>=0&&ans[i].data<=k)
{
ans[i].num=cnt++;//大于0小于k的部分,cnt作为排序依据
}
}
for(int i=begin1;i!=-1;i=ans[i].next)
{
if(ans[i].data>k)//大于k的部分,cnt作为排序依据
{
ans[i].num=cnt++;
}
}
sort(ans,ans+Max,cmp);//排序
for(int i=0;i<cnt-1;i++)//cnt是实际的个数的大小
{
printf("%05d %d %05d\n",ans[i].address,ans[i].data,ans[i+1].address);
}
printf("%05d %d -1",ans[cnt-1].address,ans[cnt-1].data);
return 0;
}