1075 链表元素分类 (25 分)

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [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 个结点的地址;结点总个数,即正整数N (≤10?5??);以及正整数K (≤10?3??)。结点的地址是 5 位非负整数,NULL 地址用 ?1 表示。

接下来有 N 行,每行格式为:

Address Data Next

其中 Address 是结点地址;Data 是该结点保存的数据,为 [?10?5??,10?5??] 区间内的整数;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

作者: CHEN, Yue

单位: 浙江大学

时间限制: 400 ms

内存限制: 64 MB

代码长度限制: 16 KB

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1000010;

struct Node{
    int address,data,next;
    int flag;
    int count;
}node[maxn];

bool cmp(Node a,Node b){
    if(a.flag != b.flag) return a.flag < b.flag;
    else return a.count < b.count;
}

int main(){
    for(int i = 0; i < maxn; i++){
        node[i].flag = maxn;
        node[i].count = maxn;
    }
    int begin,n,k;
    scanf("%05d%d%d",&begin,&n,&k);
    int address;
    for(int i = 0; i < n; i++){
        scanf("%d",&address);
        scanf("%d%d",&node[address].data,&node[address].next);
        node[address].address = address;
    }
    int p = begin,cnt = 0;
    while(p != -1){
        node[p].count = cnt++;
        if(node[p].data < 0) node[p].flag = -1;
        else if(node[p].data > k) node[p].flag = 15;

        else  node[p].flag = 10;
        p = node[p].next;
    }
    sort(node,node+maxn,cmp);
    if(cnt == 0) printf("-1");
    else{
    for(int i = 0; i < cnt; i++){
        printf("%05d %d",node[i].address,node[i].data);
        if(i < cnt - 1) printf(" %05d\n",node[i+1].address);
        else printf(" -1");
    }
}
    return 0;
} 

原文地址:https://www.cnblogs.com/wanghao-boke/p/10421148.html

时间: 2024-10-12 04:12:17

1075 链表元素分类 (25 分)的相关文章

PAT Basic 1075 链表元素分类 (25 分)

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [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 个结点的地址:结点总个数,即正整数N (≤):以及正整数K (≤).结点的地址是 5 位非负整数,

1075. 链表元素分类(25)

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[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位非负整数,N

PAT1075-----链表元素分类 (25分)

1075 链表元素分类 (25分) 输入样例: 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

PAT 1075 链表元素分类

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

1075 链表元素分类

这是一道 模板题.直接背步骤,写代码.... #include<iostream> #include<algorithm> using namespace std; const int maxn = 100010; struct Node { //第一步:定义静态链表 int address,next,data; int order = 2*maxn;//第二步,初始化order } node[maxn]; bool cmp(const Node& a,const Node

(未AC)7-4 求指定层的元素个数 (25分)

输入一个嵌套列表,再输入层数,求该层的数字元素个数. 输入格式: 第一行输入列表 第二行输入层数 输出格式: 在一行中输出元素个数 输入样例: 在这里给出一组输入.例如: [1,2,[3,4,[5,6],7],8] 3 输出样例: 在这里给出相应的输出.例如: 2 1 #include<iostream> 2 #include<stack> 3 #include<string> 4 #include<cctype> 5 using namespace std

链表_A1032 Sharing (25 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805460652113920 /* *链表的处理 *1.定义静态链表,结构体数组 *2.初始化falg为false *3.从链表首地址begin遍历,并标记有效结点 *4.对结点排序,有效结点true大于false */ #include<iostream> using namespace std; #include<cstdio> const int MA

L2-002 链表去重 (25 分)

错误代码,写了一个多小时还是错的,而且只有两分,悲伤逆流成河 #include <iostream> #include <map> #include <stdio.h> #include <math.h> #include <algorithm> using namespace std; map<int,int>mp; typedef struct List { int ard,data,nard; struct List *next

PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)

1052 Linked List Sorting (25 分) A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, y