PAT乙级

时间:2019-01-30
本文章向大家介绍PAT乙级,主要包括PAT乙级使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目链接

写的很啰嗦。。。测试点6没过 以后再改吧。。。

实现

#include <cstdio>
#include <iostream>
#include <vector>
#define MAXSIZE 100001
using namespace std;
struct node {
	int add, data, next;
};

int main()
{
	int start, N, K, i, add, data, next;
	vector<node> nodes(MAXSIZE);
	//map<int, int> before_add;
	cin >> start >> N >> K;
	for (i = 0; i < N; i++)
	{
		cin >> add >> data >> next;
		nodes[add].add = add;
		nodes[add].data = data;
		nodes[add].next = next;
		//	before_add[next] = add;
	}
	int partstart = start, count = 0, partend, run;

	while (N >= K)
	{
		vector<int> partadd(K);
		partend = partstart;
		count = 1;
		while (count < K)
		{
			partadd[count++] = partstart;
			if (partstart == -1)
				continue;
			partstart = nodes[partstart].next;
		}
		int pn = N - count>0 ? nodes[partstart].next : partstart;
		int nextstart = pn;
		if ((N - K) >= K)
		{
			i = 1;
			for (i = 1; i < K; i++)	pn = nodes[pn].next;
		}
		partadd[0] = pn;
		for (; count >= 1; count--)
		{
			int tempadd = partadd[count - 1];
			if (N == 1)
				printf("%05d %d -1\n", nodes[partstart].add, nodes[partstart].data);
			else
				printf("%05d %d %05d\n", nodes[partstart].add, nodes[partstart].data, tempadd);

			partstart = tempadd;
			N--;
		}
		partstart = nextstart;

	}

	while (N)
	{
		if (nodes[partstart].next == -1)
		{
			printf("%05d %d -1\n", nodes[partstart].add, nodes[partstart].data);
			break;
		}

		else
			printf("%05d %d %05d\n", nodes[partstart].add, nodes[partstart].data, nodes[partstart].next);
		partstart = nodes[partstart].next;
		N--;
	}
	return 0;
}