#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int address,next,data,flag;
node(){
flag=0; //flag=0表示非链表结点,flag=1表示是链表结点
}
}no[100010];
bool cmp(node a,node b){
return a.flag>b.flag;
}
int main(){
//freopen("g:\\in.txt","r",stdin);
int start,numn,sublen;
scanf("%d%d%d",&start,&numn,&sublen);
for(int i=0;i<numn;i++){
int a;
scanf("%d",&a);
scanf("%d%d",&no[a].data,&no[a].next);
no[a].address=a;
}
int validn=0,p=start,tnum=numn;
while(p!=-1){
no[p].flag=tnum--;
validn++;
p=no[p].next;
}
sort(no,no+100010,cmp);
int numg=validn/sublen;
for(int i=0;i<numg;i++){
for(int j=(i+1)*sublen-1;j>i*sublen;j--)
printf("%05d %d %05d\n",no[j].address,no[j].data,no[j-1].address);
if(i!=numg-1) printf("%05d %d %05d\n",no[i*sublen].address,no[i*sublen].data,no[(i+2)*sublen-1].address); //小组的最后一个 元素
else if(validn%sublen==0) printf("%05d %d -1\n",no[i*sublen].address,no[i*sublen].data); //最后一个小组的最后一个元素 (恰好为整数组)
else printf("%05d %d %05d\n",no[i*sublen].address,no[i*sublen].data,no[(i+1)*sublen].address); //最后一个小组的最后一个元素 (有余数)
}
if(validn%sublen!=0){ //不恰好为整数组的情况下,按序输出最后几个元素
for(int i=numg*sublen;i<validn-1;i++)
printf("%05d %d %05d\n",no[i].address,no[i].data,no[i+1].address);
printf("%05d %d -1\n",no[validn-1].address,no[validn-1].data);
}
return 0;
}
PAT A1074
最新推荐文章于 2021-09-29 11:41:11 发布