首页 > 其他分享 >1075 链表元素分类——25分

1075 链表元素分类——25分

时间:2022-08-15 11:27:19浏览次数:58  
标签:25 结点 元素 10 1075 链表 data first

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0, K]区间内的元素都排在大于K的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K为10,则输出应该为 -4→-6→-2→7→0→5→10→18→11。

输入格式:
每个输入包含1个测试用例。每个测试用例第1行给出:第1个结点的地址;结点总个数,即正整数N (<= 105);以及正整数K (<=1000)。结点的地址是5位非负整数,NULL地址用-1表示。
接下来有N行,每行格式为:
Address Data Next
其中Address是结点地址;Data是该结点保存的数据,为[-105, 105]区间内的整数;Next是下一结点的地址。题目保证给出的链表不为空。

输出格式:
对每个测试用例,按链表从头到尾的顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。

输入样例:

00100 9 10
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218

输出样例:

33218 -4 68237
68237 -6 48652
48652 -2 12309
12309 7 00000
00000 0 99999
99999 5 23333
23333 10 00100
00100 18 27777
27777 11 -1

| 代码长度限制 | 时间限制 | 内存限制 |
| 16KB | 400ms | 64MB |

代码:

#include<bits/stdtr1c++.h>
using namespace std;
struct node {
	int adress, data, next;
} N[100005];
vector<node> v[4];
int main() {
	int first, n, k;
	cin >> first >> n >> k;
	for (int i = 0, t; i < n; i++) {
		cin >> t;
		N[t].adress = t;
		cin >> N[t].data >> N[t].next;
	}
	while (first != -1) { //按题意要求将不同的节点分别存入不同的vector
		if (N[first].data < 0)
			v[1].emplace_back(N[first]);
		else if (N[first].data >= 0 && N[first].data <= k)
			v[2].emplace_back(N[first]);
		else
			v[3].emplace_back(N[first]);
		first = N[first].next;
	}
	for (int i = 1; i <= 3; i++) {
		for (int j = 0; j < int(v[i].size()); j++) {
			v[0].emplace_back(v[i][j]); //将三个vector合并入一个中
		}
	}
	int len = int(v[0].size());
	for (int i = 0; i < len; i++) {
		if (i != len - 1) v[0][i].next = v[0][i + 1].adress; //重新安排地址,使前后节点的next和adress相关联,注意最后以-1结束
		else v[0][i].next = -1;
	}
	for (int i = 0; i < len; i++) {
		if (i != len - 1) printf("%05d %d %05d\n", v[0][i].adress, v[0][i].data, v[0][i].next); //输出部分用scanf和%05d控制格式
		else printf("%05d %d -1", v[0][i].adress, v[0][i].data);
	}
	return 0;
}

标签:25,结点,元素,10,1075,链表,data,first
From: https://www.cnblogs.com/Fare-well/p/16587620.html

相关文章

  • 1007 Maximum Subsequence Sum(25分)
    Givenasequenceof K integers{ N1​, N2​,..., NK​ }.Acontinuoussubsequenceisdefinedtobe{ Ni​, Ni+1​,..., Nj​ }where 1≤i≤j≤K.Th......
  • 1006 Sign In and Sign Out(25分)
    Atthebeginningofeveryday,thefirstpersonwhosignsinthecomputerroomwillunlockthedoor,andthelastonewhosignsoutwilllockthedoor.Givent......
  • Min_25 筛
    怎么都开Min_25筛了那我也开一些定义:\(n\):前缀和上界\(p_i\):第\(i\)个质数(定义\(p_0=1\))\(p_{\max}\):\(<\sqrtn\)的最大质数\(\text{mindiv}(n)\):\(n\)的......
  • [atAGC025E]Walking on a Tree
    设第$i$条边被$c_{i}$条路径覆盖,显然答案上界为$\sum\min(c_{i},2)$事实上,上界可以被取到,考虑以下构造——取树上的一个叶子,假设其到父亲的边为$i$,对其分类讨论:1.若$c_{......
  • Solution -「NOI 2017」「洛谷 P3825」游戏
    \(\mathscr{Description}\)  Link.  给大家看个乐子:link,懒得概括题意啦.\(\mathscr{Solution}\)  对于没有X的情况,显然可以2-SAT;对于有X的情况,暴......
  • Atcoder Grand Contest 025 E - Walking on a Tree(欧拉回路)
    Atcoder题面传送门打个表发现答案等于每条边被覆盖的次数与\(2\)取min之和,考虑如何构造这个上界。首先考虑树是以\(1\)为中心的菊花图,且任意\(A_i,B_i\ne1\)的......
  • 1070 结绳——25分
    给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串......
  • 1065 单身狗——25分
    “单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。输入格式:输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的......
  • org.elasticsearch.transport.RemoteTransportException: [fort2][172.100.4.25:9300]
    elasticsearch报错[2022-08-06T23:00:05,943][INFO][o.e.c.c.JoinHelper][fort1]failedtojoin{fort2}{nR7UstreQIe_yKXlxpo-Ew}{XRdOsMHwTnafWK9SD943Gg}{1......
  • 链表内指定区间反转
    目录题目描述解题思路解题代码题目描述题目地址:http://mtw.so/5Pu929题目要求将一个节点数为size链表m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复......