PAT (Basic Level) 1075 链表元素分类(模拟)
题目链接:点击查看
题目大意:初始时给出一个链表,需要按照要求排序:
- 当结点中的值为负数时,需要排在最前面
- 当结点中的值为非负数且小于阈值k时,排在中间
- 当结点中的值大于阈值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 链表元素分类(模拟)相关推荐
- 【PAT乙级】1075 链表元素分类 (25 分)
题目地址 #include<cstdio> #include<iostream> #include<map> using namespace std; const ...
- PAT 乙级 1075 链表元素分类
1075 链表元素分类 (25 point(s)) 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面. ...
- C++学习之路 | PTA乙级—— 1075 链表元素分类 (25 分)(精简)
1075 链表元素分类 (25 分) 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元 ...
- 1075 链表元素分类
1075 链表元素分类 题目: 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺 ...
- PAT乙级真题 1075 链表元素分类 C++实现(测试点5:用map会超时)
题目 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定 ...
- 1075. 链表元素分类(25)-PAT乙级真题
给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0, K]区间内的元素都排在大于K的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→ ...
- 【超简洁】1075 链表元素分类 (25分)_34行代码AC
立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间 ...
- 1075 链表元素分类 (25 分)
给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 ...
- PTA 1075 链表元素分类
题目如下 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如: ...
最新文章
- 2021年大数据Spark(一):框架概述
- VSFTP配置参数详解
- windows系统下安装JDK8的教程图解
- Java新手如何学习Spring、Struts、Hibernate三大框架?
- html使两个按钮重叠,div按钮重叠HTML
- 【转载】SpringBoot系列——Swagger2
- __syncthreads()
- html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性
- MySQL表级完整性约束
- LinkedList源码学习
- java乐视面试题_乐视面试题 · vagabond1-1983/JavaRock Wiki · GitHub
- 车险赔付率分析报告_车险经营情况分析报告模板.ppt
- 数字电路基础知识——锁存器与触发器的建立时间和保存时间(二)
- 5W1h分析法分析---play框架
- 状态机工作流.实列.报销审批流程(二)
- [网络工程师]-IEEE 802.3定义的传输介质特性
- 超详细傻瓜iPhone自定义来电铃声教程
- typora免费版,无需破解,安装直接使用
- Elasticsearch 文档内容检索插件 ingest attachment 安装
- 不要过于积极表现自己