#include<bits/stdc++.h>
using namespace std;
const int MAXN=100100;
struct Node{
int data;
int add;
int next;
Node(){
data=-2;
add=-2;
next=-2;
}
}node[MAXN];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int start,n,k;
cin>>start>>n>>k;
for(int i=0;i<n;i++){
int st,ed,da;
cin>>st>>da>>ed;
node[st].add=st;
node[st].data=da;
node[st].next=ed;
}
vector<Node> ppp,tnode;
for(int i=start;i!=-1;i=node[i].next){
ppp.push_back(node[i]);
}
int i;
for(i=k-1;i<ppp.size();i+=k){
int temp=i;
while(temp>=i-k+1){
tnode.push_back(ppp[temp]);
temp--;
}
}
if(i>ppp.size()-1){
int temp=i-k+1;
while(temp<n){
tnode.push_back(ppp[temp]);
temp++;
}
}
for(int j=0;j<tnode.size();j++){
if(j!=tnode.size()-1){
tnode[j].next=tnode[j+1].add;
}else{
tnode[j].next=-1;
}
}
for(int j=0;j<tnode.size();j++){
if(j!=tnode.size()-1){
printf("%05d %d %05d\n",tnode[j].add,tnode[j].data,tnode[j].next);
}else{
printf("%05d %d -1",tnode[j].add,tnode[j].data);
}
}
return 0;
}
24分飘过
下面是AC代码,之前(上面的)的代码应该是没考虑无效节点
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100010;
struct Node{
int num;
int next;
int address;
}node[MAXN];
int main()
{
//freopen("in.txt","r",stdin);
int start,n,k;cin>>start>>n>>k;
for(int i=0;i<n;i++){
int add;
cin>>add;node[add].address=add;
cin>>node[add].num>>node[add].next;
}
vector<Node> ppp;
for(int i=start;i!=-1;i=node[i].next){
ppp.push_back(node[i]);
}
n=ppp.size();
vector<Node> temp;
int t1,t2;
if(n%k==0){
t1=t2=k;
}else{
t1=k;
t2=n-(n/k)*k;
}
for(int i=0;i<n/k;i++){
for(int j=i*k+t1-1;j>=i*k;j--){
temp.push_back(ppp[j]);
}
}
if(t2!=t1){
for(int i=ppp.size()-t2;i<=ppp.size()-1;i++){
temp.push_back(ppp[i]);
}
}
for(int i=0;i<temp.size()-1;i++){
printf("%05d %d %05d\n",temp[i].address,temp[i].num,temp[i+1].address);
}
printf("%05d %d -1\n",temp[temp.size()-1].address,temp[temp.size()-1].num);
return 0;
}