提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
最近要考pat了,正在复习甲级算法题
看了一些答主A1165的解法,不太理解,自己又写了一篇较为浅显的题解,希望大家看完能有所收获!
简单来说就是排序,将不同块段的结点赋上不同的段值,相同的段中即附上对应的先后顺序,然后排序呀~
代码如下(示例):
#include总结#include #include using namespace std; struct node{ int id; int data; int next; int block=-1; int loc_rank=-1; }a[100010]; bool cmp(node &a,node &b){ if(a.block!=b.block){ return a.block>b.block; }else{ return a.loc_rank int first,n,k,tempid,data,next; scanf("%d %d %d",&first,&n,&k); for(int i=0;i scanf("%d %d %d",&tempid,&data,&next); a[tempid].id=tempid; a[tempid].data=data; a[tempid].next=next; } vector ans; int block=1,loc_rank=1; for(int i=first;i!=-1;i=a[i].next,loc_rank++){ a[i].block=block; a[i].loc_rank=loc_rank; if(loc_rank%k==0){ loc_rank=0; block++; } ans.push_back(a[i]); } sort(ans.begin(),ans.end(),cmp); for(int i=0;i if(i!=ans.size()-1){ printf("%05d %d %05dn",ans[i].id,ans[i].data,ans[i+1].id); }else{ printf("%05d %d -1n",ans[i].id,ans[i].data); } } return 0; }
pat中链表的题目一般用静态链表即可解答~谢谢各位的观看



