这是看了柳神的代码之后改的,我自己写的代码第五个测试点死活通不过。
之前学习链表想到拼接链表的办法,虽然有点麻烦,但是我决定尝试一下,我知道很可能是某个地方拼接失误了,不然肯定能通过的。我把代码放在后面,如果有看出我错误的同学,麻烦指正一下。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct node{
int add,data,next;
}Node[maxn];
int main(){
int st,n,k,a;
vector<int> v[3];
scanf("%d%d%d",&st,&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&a);
Node[a].add=a;
scanf("%d%d",&Node[a].data,&Node[a].next);
}
int p=st;
while(p!=-1){
if(Node[p].data < 0){
v[0].push_back(p);
}else if(Node[p].data<=k && Node[p].data>=0){
v[1].push_back(p);
}else {
v[2].push_back(p);
}
p=Node[p].next;
}
int flag=0;
for(int i=0;i<3;i++){
for(int j=0;j<v[i].size(); j++){
if(flag==0){
printf("%05d %d",v[i][j],Node[v[i][j]].data);
flag=1;
} else {
printf(" %05d\n%05d %d",v[i][j],v[i][j],Node[v[i][j]].data);
}
}
}
printf(" -1\n");
return 0;
}
链表拼接
22分
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct node{
int add,data,next,flag;
}Node[maxn];
int main(){
int st,n,k,add;
scanf("%d%d%d",&st,&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&add);
Node[add].add=add;
scanf("%d%d",&Node[add].data,&Node[add].next);
}
int p=st;
int h1=-1,t1=0,h2=-1,t2=0,h3=-1,t3=0,cnt=0;
while(p!=-1){
if(Node[p].data < 0){
if(h1==-1){
h1=p;
t1=p;
}else{
Node[t1].next=p;
t1=p;
}
}else if(Node[p].data<=k&&Node[p].data>=0){
if(h2==-1){
h2=p;
t2=p;
}else{
Node[t2].next=p;
t2=p;
}
}else {
if(h3==-1){
h3=p;
t3=p;
}else{
Node[t3].next=p;
t3=p;
}
}
p=Node[p].next;
cnt++;
}
int newh=1e5+2;
if(h1!=-1){
Node[newh].next=h1;
if(h2!=-1) {
Node[t1].next=h2;
if(h3!=-1){
Node[t2].next=h3;
}
}else{
if(h3!=-1) Node[t1].next=h3;
}
}else{
if(h2!=-1) {
Node[newh].next=h2;
if(h3!=-1){
Node[t2].next=h3;
}
}else{
if(h3!=-1) Node[newh].next=h3;
}
}
p=Node[newh].next;
for(int i=0;i<cnt;i++){
if(i!=n-1) printf("%05d %d %05d\n",Node[p].add,Node[p].data,Node[p].next);
else printf("%05d %d",Node[p].add,Node[p].data);
p=Node[p].next;
}
printf(" -1\n");
return 0;
}