浙大PAT甲级 1097

来源:互联网 发布:java生成log日志文件 编辑:程序博客网 时间:2024/04/30 16:18

简单的链表处理,用两个vector来进行存储保留的和删除的结点。

AC代码:

#include<iostream>#include<map>#include<cstdio>#include<algorithm>#include<queue>#include<cstring>#include<set>#include<stack>#include<cmath>#include<vector>#include<hash_map>#define ll long long#define inf 24*60*60using namespace std;struct node{    int id;    int data;    int next;};map<int,node> mm;set<int> s;vector<node> v;vector<node> v1;int main(){   int sta,n;   scanf("%d %d",&sta,&n);   for(int i=0;i<n;i++)   {       node tmp;       scanf("%d %d %d",&tmp.id,&tmp.data,&tmp.next);       mm[tmp.id]=tmp;   }   int d=sta;   while(d!=-1)   {       int num=abs(mm[d].data);       if(s.find(num)==s.end())       {           v.push_back(mm[d]);           s.insert(num);       }       else       {           v1.push_back(mm[d]);       }       d=mm[d].next;   }   int i=0;   for(;i+1<v.size();i++)   {       printf("%05d %d %05d\n",v[i].id,v[i].data,v[i+1].id);   }   if(!v.empty())   {       printf("%05d %d -1\n",v[i].id,v[i].data);   }   int j=0;   for(;j+1<v1.size();j++)  // 不知道为什么写成for(;j<v1.size()-1;j++)则在第三个测试用例报段错误   {       printf("%05d %d %05d\n",v1[j].id,v1[j].data,v1[j+1].id);   }   if(!v1.empty())   {       printf("%05d %d -1\n",v1[j].id,v1[j].data);   }}


0 0
原创粉丝点击