首页 > 其他 > 详细

A1133 Splitting A Linked List (25分)

时间:2020-06-11 23:39:54      阅读:54      评论:0      收藏:0      [点我收藏+]

一、技术总结

  1. 首先题目的意思得读懂,给出一串数字,他们是有顺序的,现在要求将数字分成几种情况,负数放在最前面,按原来顺序,然后数给定的0到K,放出来,在将大于K的放在最后,记住只是移位,没有将顺序打乱。
  2. 基于此,我们可以首先使用一个node结构体用于存储每个结点的id号,数值信息,以及下一个结点编号id。记住这里只是将结果保存下来,没有顺序,所以后续要使用一个循环按顺序存入向量中,方便遍历。
  3. 我们再者我们使用两个vector temp, v向量,一个用于存储按顺序存储节点信息,一个用于保存要求排序后的结果。
  4. 最后使用三个循环,依次按要求参入到结果向量中,最后输出。

二、参考代码

#include<iostream>
#include<vector>
using namespace std;
struct node{
	int data, id, next;
}ans[100010];
int main(){
	int fid, n, k;
	vector<node> temp, v;
	scanf("%d%d%d", &fid, &n, &k); 
	for(int i = 0; i < n; i++){
		int s, d, e;
		scanf("%d%d%d", &s, &d, &e);
		ans[s] = {d, s, e};
	}
	for(; fid != -1; fid = ans[fid].next){
		v.push_back(ans[fid]);
	}
	for(int i = 0; i < v.size(); i++){
		if(v[i].data < 0) temp.push_back(v[i]);
	}
	for(int i = 0; i < v.size(); i++){
		if(v[i].data >= 0 && v[i].data <= k) temp.push_back(v[i]);
	}
	for(int i = 0; i < v.size(); i++){
		if(v[i].data > k) temp.push_back(v[i]);
	}
	for(int i = 0; i < temp.size() - 1; i++){
		printf("%05d %d %05d\n", temp[i].id, temp[i].data, temp[i+1].id);
	} 
	printf("%05d %d -1", temp[temp.size()-1].id, temp[temp.size()-1].data);
	return 0;
} 

A1133 Splitting A Linked List (25分)

原文:https://www.cnblogs.com/tsruixi/p/13096530.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!