PAT甲级 1133 - Splitting A Linked List

这里可以分成三类,用三个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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值