1075 链表元素分类 (25 分)

题目链接
被测试点4卡了好久,这里说一下测试点4

00100 9 10
66666 17 11111//注意这里的这个测试数据和其他数据没有任何关联,所以给的n里面是多一个的
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int Max=100000;
struct node
{
    int address;
    int data;
    int next;
    int num;
};
node ans[Max];
bool cmp(node a,node b)//排序
{
    return a.num<b.num;
}
int begin1,n,k;
int main()
{
    cin>>begin1>>n>>k;
    for(int i=0;i<=Max;i++)
    {
        ans[i].num=Max;//令每个结点的num为最大值,方便后面做排序
    }
    for(int i=0;i<n;i++)
    {
        int address;
        cin>>address;
        cin>>ans[address].data>>ans[address].next;//以地址作为数组的位置方便读取
        ans[address].address=address;
    }
    int cnt=0;
    int j=0;
    for(int i=begin1;i!=-1;i=ans[i].next)
    {
        if(ans[i].data<0)
        {
            ans[i].num=cnt++;//小于0的部分,cnt作为排序的依据
        }
    }
    for(int i=begin1;i!=-1;i=ans[i].next)
    {
        if(ans[i].data>=0&&ans[i].data<=k)
        {
            ans[i].num=cnt++;//大于0小于k的部分,cnt作为排序依据
        }
    }
    for(int i=begin1;i!=-1;i=ans[i].next)
    {
        if(ans[i].data>k)//大于k的部分,cnt作为排序依据
        {
            ans[i].num=cnt++;
        }
    }
    sort(ans,ans+Max,cmp);//排序
    for(int i=0;i<cnt-1;i++)//cnt是实际的个数的大小
    {
        printf("%05d %d %05d\n",ans[i].address,ans[i].data,ans[i+1].address);
    }
    printf("%05d %d -1",ans[cnt-1].address,ans[cnt-1].data);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值