自己写了一个链表模拟,结果发现原来可以用stl偷鸡,,我还是太年轻。
卡最后一个点的原因是没有用有效结点数来解决问题。
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int data=0;
int next=-1;
int tag=100010;
int add;
}ll[100000];
bool cmp(node a,node b){
return a.tag<b.tag;
}
int main(){
int head,n,k;
int step;
scanf("%d %d %d",&head,&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&step);
scanf("%d %d",&ll[step].data,&ll[step].next);
ll[step].add=step;
}
int p=head,num=0;
while(p!=-1){
ll[p].tag=++num;
p=ll[p].next;
}
sort(ll,ll+100000,cmp);
int z=n/k;
for(int i=0;i<z;i++){
reverse(ll+i*k,ll+i*k+k);
}
for(int i=0;i<num-1;i++){
printf("%05d %d %05d\n",ll[i].add,ll[i].data,ll[i+1].add);
}
printf("%05d %d -1\n",ll[num-1].add,ll[num-1].data);
return 0;
}