PAT (Basic Level) Practice (中文)- 1075 链表元素分类(25 分)

简介: PAT (Basic Level) Practice (中文)- 1075 链表元素分类(25 分)

题目链接:点击打开链接

题目大意:略。

解题思路:考虑起始点 -1 的情况 + 无用点的情况。小技巧:通过优先级(题目分类) + 标号(稳定排序)。

AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
#define MOD 1000000007
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int da[maxn], nx[maxn];
struct node
{
    int id,da,pri,mark;
}nds[maxn];
int cmp(node n1, node n2)
{
    if(n1.pri==n2.pri) return n1.mark<n2.mark;
    return n1.pri<n2.pri;
}
int main()
{
    int n,id,s,k;
    scanf("%d%d%d",&s,&n,&k);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&id);
        scanf("%d%d",&da[id],&nx[id]);
    }
    int l=0, w;
    while(s!=-1)
    {
        w=da[s];
        nds[l].da=w, nds[l].id=s, nds[l].mark=l;
        if(w<0) nds[l].pri=1;
        else if(w>=0 && w<=k) nds[l].pri=2;
        else nds[l].pri=3;
        l++;
        s=nx[s];
    }
    sort(nds,nds+l,cmp);
    for(int i=0;i<l-1;i++)
    {
        printf("%05d %d %05d\n",nds[i].id,nds[i].da,nds[i+1].id);
    }
    if(l>0) printf("%05d %d -1\n",nds[l-1].id,nds[l-1].da);
    return 0;
}
目录
相关文章
|
2月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
36 1
|
4月前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
01_移除链表元素
01_移除链表元素
|
6月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
24 0
|
2月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
30 0
|
4月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
4月前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
5月前
【数据结构OJ题】移除链表元素
力扣题目——移除链表元素
45 2
【数据结构OJ题】移除链表元素
|
4月前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
26 0
|
5月前
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
32 0