您的位置:首页 > 其它

PAT甲级 1133 - Splitting A Linked List

2018-03-06 13:56 274 查看
这里可以分成三类,用三个vector保存。第一类是小于0的;第二类是大于0但是小于k的;第三类是大于k的;但我是直接使用sort排序里面的cmp重写做的(注意使用stable_sort就行了)。

#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int startAddress,n,k;
struct node{
int address,data;
friend bool operator < (node a,node b){
if(a.data<0 && b.data>=0)return true;
if(a.data>=0 && b.data<0)return false;
if(a.data>=0 && b.data>=0){
if(a.data>k && b.data<=k)return false;
if(a.data<=k && b.data>k)return true;
}
return false;
}
}link[maxn],in[maxn];

int main(){
scanf("%d %d %d",&startAddress,&n,&k);
int u,v,x;
for(int i=0;i<n;++i){
scanf("%d %d %d",&u,&v,&x);
in[u].address=x;//address == next
in[u].data=v;
}

int temp = startAddress,pos=0;
while(temp!=-1){
link[pos].address=temp;
link[pos].data = in[temp].data;
temp = in[temp].address;
++pos;

}
stable_sort(link,link+pos);
for(int i=0;i<pos;++i){
if(i!=pos-1) printf("%05d %d %05d\n",link[i].address,link[i].data,link[i+1].address);
else printf("%05d %d -1",link[i].address,link[i].data);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: