样例能通过,但是提交的时候一直报segmentation fault,没找出来是哪里错了,麻烦大佬能指点一下~
我想用vector<pair<int,int>>
来记录负数,[0,k]之间的数,大于k的数,根据数的范围分别push_back到不同的vector中。
#include<cstdio>
#include<vector>
using namespace std;
const int N=100010;
typedef pair<int,int> PII;
vector<PII> neg,small,large;
int e[N],ne[N];
int main(){
int head,n,k;
scanf("%d%d%d",&head,&n,&k);
// printf("%d %d %d",head,n,k);
for(int i=0;i<n;i++){
int add,key,next;
scanf("%d%d%d",&add,&key,&next);
e[add]=key;
ne[add]=next;
}
for(int i=head;i!=-1;i=ne[i]){ //应该是这里导致了segmentation fault
if(e[i]<0){
neg.push_back({i,e[i]});
}
else if(e[i]>k){
large.push_back({i,e[i]});
}
else{
small.push_back({i,e[i]});
}
}
//下面都是分别输出neg,small,large
for(int i=0;i<neg.size();i++){
if(i<neg.size()-1)
printf("%05d %d %05d\n",neg[i].first,neg[i].second,neg[i+1].first);
else
printf("%05d %d %05d\n",neg[i].first,neg[i].second,small[0].first);
}
for(int i=0;i<small.size();i++){
if(i<small.size()-1)
printf("%05d %d %05d\n",small[i].first,small[i].second,small[i+1].first);
else
printf("%05d %d %05d\n",small[i].first,small[i].second,large[0].first);
}
for(int i=0;i<large.size();i++){
if(i<large.size()-1)
printf("%05d %d %05d\n",large[i].first,large[i].second,large[i+1].first);
else
printf("%05d %d -1\n",large[i].first,large[i].second);
}
return 0;
}