题目链接:点击查看

题目大意:初始时给出一个链表,需要按照要求排序:

  1. 当结点中的值为负数时,需要排在最前面
  2. 当结点中的值为非负数且小于阈值k时,排在中间
  3. 当结点中的值大于阈值k时,排在最后

在整体排序的同时尽可能不要改变原始顺序

题目分析:有了上次做模拟链表题的经验后,这个题目就顺手多了,因为规则明确将排序的要求分为了三个等级,那么我们在储存链表时顺便储存一下该结点的等级即可,最后从头结点跑一边链表,给每个结点编上序号,这样在排序的时候,优先级先按照等级来排序,若等级相同按照序号排序即可

有一个很恶心人的坑点,真的服了pat的恶心人能力了,刷波牛

测试点4,数据会给出很多单结点,也就是跟题目中所描述的链表没有任何关系的结点,我们需要将其排除后再排序然后输出,这个挺好处理的,就是鬼能想到啊,我们只需要在给链表中的每个结点编号的同时保留cnt,用cnt代替n即可

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;struct Node
{int date,next;int flag;int id;
}node[N];int ans[N];bool cmp(int a,int b)
{Node aa=node[a];Node bb=node[b];if(aa.flag!=bb.flag)return aa.flag>bb.flag;return aa.id<bb.id;
}int main()
{
//  freopen("input.txt","r",stdin);int head,n,k;scanf("%d%d%d",&head,&n,&k);for(int i=1;i<=n;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);node[a].date=b;node[a].next=c;if(node[a].date<0)node[a].flag=2;else if(node[a].date<=k)node[a].flag=1;elsenode[a].flag=0;}int cnt=0;for(int i=head;i!=-1;i=node[i].next){ans[++cnt]=i;node[i].id=cnt;}sort(ans+1,ans+1+cnt,cmp);for(int i=1;i<=cnt;i++){if(i!=cnt)printf("%05d %d %05d\n",ans[i],node[ans[i]].date,ans[i+1]);elseprintf("%05d %d %d\n",ans[i],node[ans[i]].date,-1);}return 0;
}

PAT (Basic Level) 1075 链表元素分类(模拟)相关推荐

  1. 【PAT乙级】1075 链表元素分类 (25 分)

    题目地址 #include<cstdio> #include<iostream> #include<map> using namespace std; const ...

  2. PAT 乙级 1075  链表元素分类

    1075 链表元素分类 (25 point(s)) 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面. ...

  3. C++学习之路 | PTA乙级—— 1075 链表元素分类 (25 分)(精简)

    1075 链表元素分类 (25 分) 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元 ...

  4. 1075 链表元素分类

    1075 链表元素分类 题目: 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺 ...

  5. PAT乙级真题 1075 链表元素分类 C++实现(测试点5:用map会超时)

    题目 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定 ...

  6. 1075. 链表元素分类(25)-PAT乙级真题

    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0, K]区间内的元素都排在大于K的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→ ...

  7. 【超简洁】1075 链表元素分类 (25分)_34行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间 ...

  8. 1075 链表元素分类 (25 分)

    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 ...

  9. PTA 1075 链表元素分类

    题目如下 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如: ...

最新文章

  1. 2021年大数据Spark(一):框架概述
  2. VSFTP配置参数详解
  3. windows系统下安装JDK8的教程图解
  4. Java新手如何学习Spring、Struts、Hibernate三大框架?
  5. html使两个按钮重叠,div按钮重叠HTML
  6. 【转载】SpringBoot系列——Swagger2
  7. __syncthreads()
  8. html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性
  9. MySQL表级完整性约束
  10. LinkedList源码学习
  11. java乐视面试题_乐视面试题 · vagabond1-1983/JavaRock Wiki · GitHub
  12. 车险赔付率分析报告_车险经营情况分析报告模板.ppt
  13. 数字电路基础知识——锁存器与触发器的建立时间和保存时间(二)
  14. 5W1h分析法分析---play框架
  15. 状态机工作流.实列.报销审批流程(二)
  16. [网络工程师]-IEEE 802.3定义的传输介质特性
  17. 超详细傻瓜iPhone自定义来电铃声教程
  18. typora免费版,无需破解,安装直接使用
  19. Elasticsearch 文档内容检索插件 ingest attachment 安装
  20. 不要过于积极表现自己

热门文章

  1. MySQL高级 - 日志 - 查询日志
  2. 会话创建过程-创建Executor
  3. MyBatis 架构分层与模块划分-接口层
  4. 反射练习之越过泛型检查
  5. c# decodeuri,用C#进行URL编码
  6. docker里面装mysql_docker中安装及使用mysql
  7. Mockito详细介绍
  8. 方法重写(override)注意事项和使用细节
  9. java重置_JAVA復制數組和重置數組大小
  10. OP07高级电路图-摘自:Reza Moghim