#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
using namespace std;
const int maxn = 100010;
struct Node
{
int pos;
int data;
int next;
int xxx;
}node[maxn],ans[maxn];
int main()
{
freopen("in.txt","r",stdin);
int s1,n,k,path[maxn],countn = 0,kn=0;
scanf("%d %d %d",&s1,&n,&k);
for(int i = 0;i<maxn;i++)
node[i].xxx = -1;
int p1,p2,l,index = 0;
for(int i = 0;i<n;i++)
{
scanf("%d %d %d",&p1,&l,&p2);
node[p1].data = l;
node[p1].next = p2;
node[p1].pos = p1;
}
if(k == 0)
k = 1;
if(n==0)
printf("0 -1");
else
{
int head = s1;
while(head!=-1)
{
kn++;
head = node[head].next;
}
int temp = kn / k;
for(int j = 0;j<temp;j++)
{
countn = 0;
while(s1!=-1)
{
path[countn] = s1;
s1 = node[s1].next;
countn++;
if(countn == k)
break;
}
for(int i = countn - 1;i>=0;i--)
{
ans[index].pos = path[i];
ans[index++].data = node[path[i]].data;
// printf("%05d %d %05d\n",path[i],node[path[i]].data,path[i-1]);
}
}
while(s1!=-1)
{
ans[index].pos = s1;
ans[index++].data = node[s1].data;
// printf("%05d %d %05d\n",s1,node[s1].data,node[s1].next);
s1 = node[s1].next;
}
for(int i = 0;i<index;i++)
{
if(i == index - 1)
printf("%05d %d -1\n",ans[i].pos,ans[i].data);
else
printf("%05d %d %05d\n",ans[i].pos,ans[i].data,ans[i+1].pos);
}
}
}
错了最后一个点,扣一分;
(ps:错误点在于temp 也就是循环的次数是由链表的有效节点kn\k决定而不是n、k
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
using namespace std;
const int maxn = 100010;
struct Node
{
int pos;
int data;
int next;
int xxx;
}node[maxn],ans[maxn];
int main()
{
// freopen("in.txt","r",stdin);
int s1,n,k,path[maxn],countn = 0;
scanf("%d %d %d",&s1,&n,&k);
int temp;
if(k!=0)
temp = n / k;
else
temp = 1;
for(int i = 0;i<maxn;i++)
node[i].xxx = -1;
int p1,p2,l,index = 0;
for(int i = 0;i<n;i++)
{
scanf("%d %d %d",&p1,&l,&p2);
node[p1].data = l;
node[p1].next = p2;
node[p1].pos = p1;
}
if(k == 0)
k = 1;
if(n==0)
printf("0 -1");
else
{
for(int j = 0;j<temp;j++)
{
countn = 0;
while(s1!=-1)
{
path[countn] = s1;
s1 = node[s1].next;
countn++;
if(countn == k)
break;
}
for(int i = countn - 1;i>=0;i--)
{
ans[index].pos = path[i];
ans[index++].data = node[path[i]].data;
// printf("%05d %d %05d\n",path[i],node[path[i]].data,path[i-1]);
}
}
while(s1!=-1)
{
ans[index].pos = s1;
ans[index++].data = node[s1].data;
// printf("%05d %d %05d\n",s1,node[s1].data,node[s1].next);
s1 = node[s1].next;
}
for(int i = 0;i<index;i++)
{
if(i == index - 1)
printf("%05d %d -1\n",ans[i].pos,ans[i].data);
else
printf("%05d %d %05d\n",ans[i].pos,ans[i].data,ans[i+1].pos);
}
}
}