PAT甲级 1133 - Splitting A Linked List

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr0cheng/article/details/79457345

这里可以分成三类,用三个vector保存。第一类是小于0的;第二类是大于0但是小于k的;第三类是大于k的;但我是直接使用sort排序里面的cmp重写做的(注意使用stable_sort就行了)。

#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int startAddress,n,k;
struct node{
    int address,data;
    friend bool operator < (node a,node b){
        if(a.data<0 && b.data>=0)return true;
        if(a.data>=0 && b.data<0)return false;
        if(a.data>=0 && b.data>=0){
            if(a.data>k && b.data<=k)return false;
            if(a.data<=k && b.data>k)return true;
        }
        return false;
    }
}link[maxn],in[maxn];

int main(){
    scanf("%d %d %d",&startAddress,&n,&k);
    int u,v,x;
    for(int i=0;i<n;++i){
        scanf("%d %d %d",&u,&v,&x);
        in[u].address=x;//address == next
        in[u].data=v;
    }

    int temp = startAddress,pos=0;
    while(temp!=-1){
        link[pos].address=temp;
        link[pos].data = in[temp].data;
        temp = in[temp].address;
        ++pos;

    }
    stable_sort(link,link+pos);
    for(int i=0;i<pos;++i){
        if(i!=pos-1) printf("%05d %d %05d\n",link[i].address,link[i].data,link[i+1].address);
        else printf("%05d %d -1",link[i].address,link[i].data);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Mr0cheng/article/details/79457345