最后输出的时候没想好怎么反转
学习了 int数组也有 reverse函数
在algorithm
里
坑点:
1. 有点不在链表上(已经避免开了,以前有类似题)
2. 比如123456 刚好 3个一反转 就 321 654 如果4个 就 4321 56(不变顺序)
#include <cstdio>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
struct stu{
int start;
int value;
int fin;
};
stu node[100000];
int now, n, k;
map<int,int> pai;
int main(){
scanf("%d%d%d",&now,&n,&k);
for(int i=0; i<n; i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
node[a].start = a;
node[a].value = b;
node[a].fin = c;
pai[b] = a;
}
int m=0;
int arr[110000];
int t;
for(t=now; node[t].fin != -1 ; t = node[t].fin){
arr[m] = node[t].value;
m++;
}
arr[m] = node[t].value;
int z=0;
while(z+k<=m+1){
reverse(arr+z,arr+z+k);
z = z + k;
}
if(m==0) {
printf("%05d %d -1\n",pai[arr[0]],arr[0]);
return 0;
}
int i=0;
for(; i<m; i++){
printf("%05d %d %05d\n",pai[arr[i]],arr[i],pai[arr[i+1]]);
}
printf("%05d %d -1\n",pai[arr[m]],arr[m]);
return 0;
}