zoukankan      html  css  js  c++  java
  • A1133 Splitting A Linked List (25分)

    一、技术总结

    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
    ", 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;
    } 
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    迪杰斯特拉算法简单分析
    华科机考:二叉排序树(改)
    华科机考:八进制
    华科机考:阶乘
    华科机考:找位置
    华科机考:回文字符串
    华科机考:a+b
    华科机考:N阶楼梯上楼
    华科机考:大整数排序
    iOS 适配iOS9
  • 原文地址:https://www.cnblogs.com/tsruixi/p/13096530.html
Copyright © 2011-2022 走看看