PAT 1133

本文探讨了如何优化代码以通过减少结构复杂性提高代码效率。作者分享了从使用复杂的三元结构体到简化为包含两个整数的结构,从而避免嵌套循环,快速完成排序的过程。关键步骤包括使用容器存储和合并输出,解决了内存管理和性能瓶颈。
摘要由CSDN通过智能技术生成

         本题要过最后一个测试点代码要尽量不那么复杂。

         第一遍做的时候定义了一个包含三个int的结构体,把地址,数字,下一个数字地址填进去。在遍历得到新顺序的时候用了循环嵌套,最后一个测试点直接运行超时。

        第二遍的时候为了节省时间就只定义了一个包含两个int的结构,然后把地址当作下标,里面包含数字和下一个数字的地址。在排序的时候不需要循环,只需要根据下标就能找到下一个数。

       排序就很简单用三个容器分别装进去,然后最后整成一个输出。(第一遍的没考虑某个容器为空的情况,分别把三个容器输出,最后发生段错误。整成一个就不会有这样的问题。)

#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
struct node
{
    int a;
    int b;
};
int main(){
    vector<node> fir,sec,thr,ans;
    int add1,n,k,shou;
    cin>>add1>>n>>k;
    vector<node> chu(100000);
    for (int i = 0; i < n; i++)
    {
        int qian,num,hou;
        cin>>qian>>num>>hou;
        chu[qian].a=num;
        chu[qian].b=hou;
    }
    for (int i = add1; i>=0; i=chu[i].b)
    {
        node p;
        if(chu[i].a<0){
            p.a=i;
            p.b=chu[i].a;
            fir.push_back(p);
        }
        if(chu[i].a<=k&&chu[i].a>=0){
            p.a=i;
            p.b=chu[i].a;
            sec.push_back(p);
        }
        if(chu[i].a>k){
            p.a=i;
            p.b=chu[i].a;
            thr.push_back(p);
        }
        if(chu[i].b==-1) break;
    }
    int x=fir.size(),y=sec.size(),z=thr.size();
    if(x!=0){for(int i=0;i<x;i++) ans.push_back(fir[i]);}
    if(y!=0){for(int i=0;i<y;i++) ans.push_back(sec[i]);}
    if(z!=0){for(int i=0;i<z;i++) ans.push_back(thr[i]);}
    for (int i = 0; i < ans.size()-1; i++) printf("%05d %d %05d\n",ans[i].a,ans[i].b,ans[i+1].a);
    printf("%05d %d -1\n",ans[ans.size()-1].a,ans[ans.size()-1].b);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值