柳大神,太强了
#include<iostream>
using namespace std;
#include<algorithm>
#include<math.h>
int main()
{
int first, n, k,tt, sum;
int data[100005], next[100005], list[100005];
cin >> first >> n >> k;
for (int i = 0; i < n; ++i)
{
cin >> tt;
cin >> data[tt] >> next[tt];
}
//都输入了 下一步 把这些链表串在一块
sum = 0;
while (first != -1)
{
list[sum++] = first;
first = next[first];
}
//把有效的都串起来了,该根据k进行反转了
for (int i = 0; i < (sum - sum % k); i += k)
{
reverse(begin(list) + i, begin(list) + k);
}
for (int i = 0; i < sum - 1; ++i)
printf("%05d %d %05d\n", list[i], data[list[i]], list[i + 1]);
printf("%05d %d -1", list[sum - 1], data[list[sum - 1]]);
system("pause");
return 0;
}
不得不说,学到了很多知识,长路漫漫啊
1.reverse()函数的用法
reverse(beg,end)
reverse()会将区间[beg,end)内的元素全部逆序;
2.小技巧,将一维数组全部初始化为-1
int b[100]
memset(b,-1,100) 在string.h里面
3.