题意:
n,k,翻转链表
思路
采用data[maxn],next[maxn]和list[maxn],ans[maxn]来记录链表
其他的都挺简单的,就是翻转的规律难找:
ans[i]=list[i/k*k+k-1-i%k];
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
int main(){int n,k,p,sum=0;int data[maxn],next[maxn],list[maxn],ans[maxn];cin >> p >> n >> k;for(int i=0;i<n;i++){int s,d,e;scanf("%d%d%d",&s,&d,&e);data[s]=d;next[s]=e;}for(;p!=-1;p=next[p]){list[sum++]=p;}for(int i=0;i<sum;i++) ans[i]=list[i];for(int i=0;i<sum-sum%k;i++){ans[i]=list[i/k*k+k-1-i%k]; }for(int i=0;i<sum-1;i++){printf("%05d %d %05d\n",ans[i],data[ans[i]],ans[i+1]);}printf("%05d %d -1",ans[sum-1],data[ans[sum-1]]);return 0;
}