/*
title:
问题分类:
1.有多个-1
2.只有一个节点
3.翻转全部节点,最后改-1
对于1始终不过,5ab10010是段错误
struct t{
int add;
int data;
int next;
}a[100010],b[100010];
int find(int add,t a[],int len){
for(int i=0;i<len;i++){
if(add==a[i].add){
return i;
}
}
}
int main(){
//freopen("in.txt","r",stdin);
int fir,len,res;
while(scanf("%d %d %d",&fir,&len,&res)!=EOF){
for(int i=0;i<len;i++){
scanf("%d %d %d",&a[i].add,&a[i].data,&a[i].next);
}
//2.只有一个节点
if(len==1){
printf("%05d %d %d\n",a[0].add,a[0].data,-1);
continue;
}
//struct t b[len];
int k=find(fir,a,len);
b[0].add=a[k].add;
b[0].data=a[k].data;
b[0].next=a[k].next;
for(int i=1;;i++){
k=find(b[i-1].next,a,len);
b[i].add=a[k].add;
b[i].data=a[k].data;
b[i].next=a[k].next;
//1.有多个-1
if(b[i].next==-1){
len=i;
break;
}
}
for(int i=res-1;i>=0;i--){
if(i!=0){
b[i].next=b[i-1].add;
}else{
b[i].next=b[res].add;
}
}
for(int i=res-1;i>=0;i--){
//3.翻转全部节点,最后改-1
if(i==0&&res==(len+1)){
printf("%05d %d %d\n",b[i].add,b[i].data,-1);
}else{
printf("%05d %d %05d\n",b[i].add,b[i].data,b[i].next);
}
}
for(int i=res;i<=len;i++){
if(b[i].next!=-1){
printf("%05d %d %05d\n",b[i].add,b[i].data,b[i].next);
}else{
printf("%05d %d %d\n",b[i].add,b[i].data,-1);
}
}
}
return 0;
}
title:
问题分类:
1.有多个-1
2.只有一个节点
3.翻转全部节点,最后改-1
对于1始终不过,5ab10010是段错误
*/
http://www.patest.cn/contests/mooc-ds/02-1
struct t{
int add;
int data;
int next;
}a[100010],b[100010];
int find(int add,t a[],int len){
for(int i=0;i<len;i++){
if(add==a[i].add){
return i;
}
}
}
int main(){
//freopen("in.txt","r",stdin);
int fir,len,res;
while(scanf("%d %d %d",&fir,&len,&res)!=EOF){
for(int i=0;i<len;i++){
scanf("%d %d %d",&a[i].add,&a[i].data,&a[i].next);
}
//2.只有一个节点
if(len==1){
printf("%05d %d %d\n",a[0].add,a[0].data,-1);
continue;
}
//struct t b[len];
int k=find(fir,a,len);
b[0].add=a[k].add;
b[0].data=a[k].data;
b[0].next=a[k].next;
for(int i=1;;i++){
k=find(b[i-1].next,a,len);
b[i].add=a[k].add;
b[i].data=a[k].data;
b[i].next=a[k].next;
//1.有多个-1
if(b[i].next==-1){
len=i;
break;
}
}
for(int i=res-1;i>=0;i--){
if(i!=0){
b[i].next=b[i-1].add;
}else{
b[i].next=b[res].add;
}
}
for(int i=res-1;i>=0;i--){
//3.翻转全部节点,最后改-1
if(i==0&&res==(len+1)){
printf("%05d %d %d\n",b[i].add,b[i].data,-1);
}else{
printf("%05d %d %05d\n",b[i].add,b[i].data,b[i].next);
}
}
for(int i=res;i<=len;i++){
if(b[i].next!=-1){
printf("%05d %d %05d\n",b[i].add,b[i].data,b[i].next);
}else{
printf("%05d %d %d\n",b[i].add,b[i].data,-1);
}
}
}
return 0;
}