PAT-1133(Splitting A Linked List)vector的应用+链表+思维
Splitting A Linked List
PAT-1133
- 本题一开始我是完全按照构建链表的数据结构来模拟的,后来发现可以完全使用两个vector来解决
- 一个重要的性质就是位置是相对不变的。
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<sstream>
#include<set>
#include<map>
using namespace std;
const int maxn=100005;
struct Node{
int address,data,next;
int trnext;//下一节点
// int trpre;//父节点
Node(){}
Node(int a,int b,int c):address(a),data(b),next(c){}
};
Node node[maxn];
map<int,int>ma;
int main(){
int start,n,k;
cin>>start>>n>>k;
for(int i=0;i<n;i++){
int address,data,next;
cin>>address>>data>>next;
ma[address]=i;
node[i]=Node(address,data,next);
if(address==start){
start=i;
}
}
for(int i=0;i<n;i++){
int next=node[i].next;
int trnext;
if(next==-1)
trnext=-1;
else trnext=ma[next];
node[i].trnext=trnext;
}
int neg=-1;//指向当前待插入的负数节点
int now=start;//当前节点
int pre=-1;//前驱结点
for(int next=start;next!=-1;){
int data=node[next].data;
now=next;
next=node[next].trnext;
if(data<0){
if(neg==-1&&pre==-1){//第一个出现的负节点 和头结点
pre=now;
neg=now;
}else if(neg==-1){
node[pre].trnext=next;
node[now].trnext=start;
start=now;
neg=start;//第一个 非head的负节点
//pre不变
}else{
node[pre].trnext=next;
node[now].trnext=node[neg].trnext;
node[neg].trnext=now;
neg=now;
}
}else{
pre=now;
}
}
//所有在0-k之间的数必须出现在大于k的数之前
pre=neg;
int next;
if(neg==-1){
next=start;
}else next=node[neg].trnext;
for(;next!=-1;){
int data=node[next].data;
now=next;
next=node[next].trnext;
if(data<=k&&data>=0){
if(neg==-1&&pre==-1){//第一个出现的负节点 和头结点
pre=now;
neg=now;
}else if(neg==-1){//表示没有负数节点
node[pre].trnext=next;
node[now].trnext=start;
start=now;
neg=now;//第一个 非head的负节点
//pre不变
}else{
node[pre].trnext=next;
node[now].trnext=node[neg].trnext;
node[neg].trnext=now;
neg=now;
}
}else{
pre=now;
}
}
for(now=start;now!=-1;now=node[now].trnext){
int a=node[now].address;
int b=node[now].data;
int c=node[now].trnext;
if(c!=-1){
c=node[c].address;
}
if(c!=-1){
printf("%05d %d %05d\n",a,b,c);
}else{
printf("%05d %d %d\n",a,b,c);
}
// cout<<node[now].address<<" "<<node[now].data<<" "<<node[node[now].trnext].address<<endl;
}
return 0;
}
#include<iostream>
#include<vector>
using namespace std;
struct node{
int id,data,next;
};
int main(){
int begin, n, k, s, d, e;
cin>>begin>>n>>k;
node a[100010];
vector<node> v,ans;
for(int i=0;i<n;i++){
scanf("%d%d%d\n",&s,&d,&e);
a[s]={s,d,e};
}
for(;begin!=-1;begin=a[begin].next){
v.push_back(a[begin]);
}
for(int i=0;i<v.size();i++){
if(v[i].data<0)ans.push_back(v[i]);
}
for(int i=0;i<v.size();i++){
if(v[i].data>=0 && v[i].data<=k)ans.push_back(v[i]);
}
for(int i=0;i<v.size();i++){
if(v[i].data>k)ans.push_back(v[i]);
}
for(int i=0;i<ans.size();i++){
if(i!=ans.size()-1)printf("%05d %d %05d\n",ans[i].id,ans[i].data,ans[i+1].id);
else printf("%05d %d -1",ans[i].id,ans[i].data);
}
return 0;
}
PAT-1133(Splitting A Linked List)vector的应用+链表+思维的更多相关文章
- PAT 1133 Splitting A Linked List[链表][简单]
1133 Splitting A Linked List(25 分) Given a singly linked list, you are supposed to rearrange its ele ...
- PAT 1133 Splitting A Linked List
Given a singly linked list, you are supposed to rearrange its elements so that all the negative valu ...
- PAT A1133 Splitting A Linked List (25 分)——链表
Given a singly linked list, you are supposed to rearrange its elements so that all the negative valu ...
- 1133 Splitting A Linked List
题意:把链表按规则调整,使小于0的先输出,然后输出键值在[0,k]的,最后输出键值大于k的. 思路:利用vector<Node> v,v1,v2,v3.遍历链表,把小于0的push到v1中 ...
- PAT A1133 Splitting A Linked List (25) [链表]
题目 Given a singly linked list, you are supposed to rearrange its elements so that all the negative v ...
- PAT1133:Splitting A Linked List
1133. Splitting A Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- PAT_A1133#Splitting A Linked List
Source: PAT A1133 Splitting A Linked List (25 分) Description: Given a singly linked list, you are su ...
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
随机推荐
- Codeforces Round #673 (Div. 2) B. Two Arrays (贪心)
题意:给你一组数\(a\)和一个数\(T\),将这组数分为两组\(c\)和\(d\),定义\(f(x)\)为数组\(x\)中任意两个不同元素的和为\(T\)的个数,问为了使\(min(f(c)+f(d ...
- CF1462-C. Unique Number
题意: 给出一个数字x,让你找出一个由1到9这九个数字组成的数字,这个数字的每一位加起来等于x,并且1到9每个数字只能出现一次.若能找到这样的数字,输出这其中最小的一个,否则输出-1. 思路: 利用二 ...
- 在kubernetes集群里集成Apollo配置中心(6)之实战使用apollo分环境管理dubbo服务
生产实践 1.迭代新需求/修复BUG(编码--->提git) 2.测试环境发版,测试(应用通过编译打包发布至test命名空间) 3.测试通过,上线(应用镜像直接发布至prod命名空间) 系统架构 ...
- 数理统计11:区间估计,t分布,F分布
在之前的十篇文章中,我们用了九篇文章的篇幅讨论了点估计的相关知识,现在来稍作回顾. 首先,我们讨论了正态分布两个参数--均值.方差的点估计,给出了它们的分布信息,并指出它们是相互独立的:然后,我们讨论 ...
- Web 前端页面性能监控指标
Web 前端页面性能监控指标 性能监控 / 性能指标 / 性能优化 白屏时间计算 FCP 白屏时间:从浏览器输入地址并回车后到页面开始有内容的时间: 首屏时间计算 FMP 首屏时间:从浏览器输入地址并 ...
- image cache service
image cache service 图床 https://images.weserv.nl/ https://github.com/weserv/images meta & referre ...
- Python Coding Interview
Python Coding Interview Python Advanced Use enumerate() to iterate over both indices and values Debu ...
- Dart DevTools & Flutter
Dart DevTools & Flutter https://flutter.dev/docs/development/tools/devtools/overview https://dar ...
- react new features 2020
react new features 2020 https://insights.stackoverflow.com/survey/2019#technology-_-web-frameworks h ...
- Azure & FaaS in Action
Azure & FaaS in Action VSCode & Azure azure tenant select subscription Cloud Shell https://a ...