PAT乙级1075

来源:互联网 发布:青云端软件下载 编辑:程序博客网 时间:2024/06/05 06:12

这道题可以分为两步,第一步是写出链表的正确顺序,第二部对内部数据进行分类。
第一步:网上有用大数组映射完成的,但假如无法映射我这里用map结构
第二部:将链表分为三部分的时候需要条件判断下个地址是否为NULL跳出循环。

#include <iostream>#include <map>#include <vector>using namespace std;struct Node{    int add;    int data;    int next;};int main(){    int first,N,K;    Node table[100001];    //map<int,Node> table;    vector<Node> nag,bet,big,sum;    Node one;    cin>>first>>N>>K;    for(int i=0;i<N;i++){        cin>>one.add>>one.data>>one.next;        table[one.add]=one;    }    for(int i=0;i<N;i++){        if(table[first].data<0){            nag.push_back(table[first]);        }else if(table[first].data>=0&&table[first].data<=K){            bet.push_back(table[first]);        }else{            big.push_back(table[first]);        }        if(table[first].next==-1) break;//没有这一句会导致倒数第二个测试点无法通过        first=table[first].next;    }    sum=nag;    sum.insert(sum.end(),bet.begin(),bet.end());    sum.insert(sum.end(),big.begin(),big.end());    for(int i=0;i<sum.size()-1;i++){        printf("%05d %d %05d\n",sum[i].add,sum[i].data,sum[i+1].add);    }    printf("%05d %d -1",sum[sum.size()-1].add,sum[sum.size()-1].data);    return 0;}
原创粉丝点击