【PAT】1052. Linked List Sorting

来源:互联网 发布:ubuntu安装分区设置 编辑:程序博客网 时间:2024/04/28 09:27

关键:注意各处05d,还有啃爹的特判,0 -1,也就是一个有效节点都没有

#define LOCAL#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 addr;    int next;    int order;}node[maxn];bool cmp(Link a,Link b){    return a.order<b.order;}bool cmp1(Link a,Link b){    return a.data<b.data;}int main(){    #ifdef LOCAL        freopen("data.in","r",stdin);        freopen("data.out","w",stdout);    #endif // LOCAL    int first,n;    for(int i=0;i<maxn;i++) node[i].order=maxn;    scanf("%d%d",&n,&first);    int add;    for(int i=0;i<n;i++){        scanf("%d",&add);        scanf("%d%d",&node[add].data,&node[add].next);        node[add].addr=add;    }    int p=first;    int cnt=0;    while(p!=-1){        node[p].order=cnt++;        p=node[p].next;    }    if(cnt==0) printf("0 -1");    else{        sort(node,node+maxn,cmp);    sort(node,node+cnt,cmp1);    for(int i=0;i<cnt-1;i++){        node[i].next=node[i+1].addr;    }    node[cnt-1].next=-1;    printf("%d %05d\n",cnt,node[0].addr);    for(int i=0;i<cnt;i++){        if(i!=cnt-1)        printf("%05d %d %05d\n",node[i].addr,node[i].data,node[i].next);        else printf("%05d %d %d\n",node[i].addr,node[i].data,node[i].next);    }    }    return 0;}


0 0
原创粉丝点击