题目链接:点击打开链接
知识点笔记:
AC代码:
#include <iostream>
using namespace std;
int main(){
int first,k,n,count=0;
cin>>first>>n>>k;
int temp,data[100005],next[100005],list[100005],result[100005];
for(int i=0;i<n;i++){
cin>>temp;
cin>>data[temp]>>next[temp];
}
while(first!=-1){
list[count++]=first;
first=next[first];
}
for(int i=0;i<count;i++) result[i]=list[i];
for(int i=0;i<(count-count%k);i++)
//在某个区间逆置,i/k*k表示起点,k-1是这个区间长度,比如,k=3,0 1 2,2-0=2
//那么这个区间最右边就是i/k*k+k-1,逆置,再减去i%k就行了
result[i]=list[i/k*k+k-1-i%k];
for(int i=0;i<count-1;i++)
printf("%05d %d %05d\n",result[i],data[result[i]],result[i+1]);
printf("%05d %d -1",result[count-1],data[result[count-1]]);
return 0;
}