PAT (Advanced Level) Practice 1133 Splitting A Linked List (25 分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/84890047
#include<cstdio>
using namespace std;

const int N=1e5+5;

struct Node
{
    int add,key,nxt;
}p[N],np[N],np1[N],np2[N],np3[N];

int main()
{
    int n,k,head;
    scanf("%d%d%d",&head,&n,&k);
    for(int i=0;i<n;i++)
    {
        int x;scanf("%d",&x);
        scanf("%d%d",&p[x].key,&p[x].nxt);
        p[x].add=x;
    }
    int cnt=0;
    for(int i=head;i!=-1;i=p[i].nxt)
        np[cnt++]=p[i];
    int num[3]={0};
    for(int i=0;i<cnt;i++)
    {
        if(np[i].key<0)
            np1[num[0]++]=np[i];
        else if(np[i].key<=k)
            np2[num[1]++]=np[i];
        else
            np3[num[2]++]=np[i];
    }
    for(int i=0;i<num[1];i++)
        np1[num[0]++]=np2[i];
    for(int i=0;i<num[2];i++)
        np1[num[0]++]=np3[i];
    for(int i=0;i<num[0];i++)
    {
        printf("%05d %d ",np1[i].add,np1[i].key);
        if(i==num[0]-1) printf("-1\n");
        else printf("%05d\n",np1[i+1].add);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Nightmare_ak/article/details/84890047