【PAT】1097. Deduplication on a Linked List
来源:互联网 发布:淘宝朵以专卖店 编辑:程序博客网 时间:2024/06/02 02:54
考查点:静态链表
思路:自己用单链表的方法但是超时,需要转化为数组,而不是使用next遍历
提交情况:第一次少输了一个数没运行出来,之后忘记改next节点
收获:静态链表的题还是不要尝试改动next为好,尽量转为数组,通过加一个变量
ac代码:
思路:自己用单链表的方法但是超时,需要转化为数组,而不是使用next遍历
提交情况:第一次少输了一个数没运行出来,之后忘记改next节点
收获:静态链表的题还是不要尝试改动next为好,尽量转为数组,通过加一个变量
23分代码:
#define LOCAL#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <vector>#include <map>#include <set>#include <queue>#define FOR(i, x, y) for(int i = x; i <= y; i++)#define rFOR(i, x, y) for(int i = x; i >= y; i--)#define MAXN 10005#define oo 0x3f3f3f3fusing namespace std;const int maxn=100010;struct Link{ int data; int add; int next;}node[maxn];int h[10010];int main(){ #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif // LOCAL int first,n; scanf("%d%d",&first,&n); int add; for(int i=0;i<n;i++){ scanf("%d",&add); scanf("%d%d",&node[add].data,&node[add].next); node[add].add=add; } int p=first; int pre=first; int q=-1; int qq; while(p!=-1){ int k=abs(node[p].data); h[k]++; if(h[k]>1){ if(q==-1)qq=p; if(q!=-1)node[q].next=p; node[pre].next=node[p].next; q=p; p=node[p].next; }else{ pre=p;p=node[p].next; } } node[q].next=-1; p=first; while(p!=-1){ if(node[p].next!=-1)printf("%05d %d %05d\n",p,node[p].data,node[p].next); else printf("%05d %d -1\n",p,node[p].data); p=node[p].next; } while(qq!=-1){ if(node[qq].next!=-1) printf("%05d %d %05d\n",qq,node[qq].data,node[qq].next); else printf("%05d %d -1",qq,node[qq].data); qq=node[qq].next; } return 0;}
ac代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <vector>#include <map>#include <set>#include <queue>using namespace std;const int maxn=100010;struct Link{ int data; int add,order; int next;}node[maxn];int h[10010];bool cmp(Link a,Link b){ return a.order<b.order;}int main(){ #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif // LOCAL int first,n,add; for(int i=0;i<maxn;i++){ node[i].order=2*maxn; } scanf("%d%d",&first,&n); for(int i=0;i<n;i++){ scanf("%d",&add); scanf("%d%d",&node[add].data,&node[add].next); node[add].add=add; } int cntv=0,cntr=0,p=first; while(p!=-1){ if(h[abs(node[p].data)]==0){ h[abs(node[p].data)]++; node[p].order=cntv++; }else{ node[p].order=maxn+cntr++; } p=node[p].next; } sort(node,node+maxn,cmp); int cnt=cntv+cntr; for(int i=0;i<cnt;i++){ if(i!=cnt-1&&i!=cntv-1){ printf("%05d %d %05d\n",node[i].add,node[i].data,node[i+1].add); }else{ printf("%05d %d -1\n",node[i].add,node[i].data); } } return 0;}
0 0
- PAT--1097. Deduplication on a Linked List
- 【PAT】1097. Deduplication on a Linked List
- PAT A 1097. Deduplication on a Linked List (25)
- PAT-A-1097. Deduplication on a Linked List (25)
- PAT A 1097. Deduplication on a Linked List (25)
- PAT 1097 Deduplication on a Linked List
- pat 1097 Deduplication on a Linked List
- PAT-Deduplication on a Linked List (25)
- PAT 1097 Deduplication on a Linked List
- PAT-Deduplication on a Linked List
- PAT 1097. Deduplication on a Linked List (25)
- [PAT]1097. Deduplication on a Linked List (25)
- 【PAT】1097. Deduplication on a Linked List (25)
- PAT 1097. Deduplication on a Linked List (25)
- PAT 1097. Deduplication on a Linked List (25)
- 1097. Deduplication on a Linked List (25) PAT甲级
- PAT甲级练习1097. Deduplication on a Linked List (25)
- 链表应用--PAT.1097.Deduplication on a Linked List
- Firefox不再使用缓存 --- 开发时调试有用
- 创建 vxlan 并部署 instance
- 81. Search in Rotated Sorted Array II
- hibernate的查询方法
- Volley
- 【PAT】1097. Deduplication on a Linked List
- VTK修炼之道81:VTK开发基础_vtkObject类深入分析
- awk总结
- vim配置文件
- Retrofit2.0使用详解
- oracle一步一步学习(一)
- Java反射机制
- 每天一个linux命令:gzip命令
- FBX生成Prefab