注意:int b[100020] ;
memset(b,-1,100020); //全部初始化为-1 memset 在string.h 里面(此处可不用,不过是个小知识点)
思路1:自己写的(最后两个测试点报错)
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
struct stu{
int first,data,next;
};
int main()
{
int a1,n,k;
cin>>a1>>n>>k;
vector<stu> v(n);
int a[100020],b[100020],m=0,t,tt;
memset(b,-1,100020); //全部初始化为-1 memset 在string.h 里面(此处可不用,不过是个小知识点)
for(int i=0;i<n;i++){
cin>>v[i].first>>v[i].data>>v[i].next;
}
while(m!=n){
for(int i=0;i<n;i++){
if(v[i].first == a1){
a[m]=v[i].data;
b[m]=v[i].first;
a1=v[i].next;
m++;
break;
}
}
}
for(int i=0;i<n/k;i++){
for (int j=0;j<k/2;j++){ //反转
t=a[i*k+j];
a[i*k+j]=a[i*k+k-1-j];
a[i*k+k-1-j]=t;
tt=b[i*k+j];
b[i*k+j]=b[i*k+k-1-j];
b[i*k+k-1-j]=tt;
}
}
for(int i=0;i<n-1;i++){ //输出
printf("%05d %d %05d\n",b[i],a[i],b[i+1]);
}
printf("%05d %d %d",b[n-1],a[n-1],b[n]);
return 0;
}
结果:
虽然没有写成功,但学到了一下几个小技巧。
技巧1:一维数组全部初始化为-1
技巧2:%5d %05d
分割线-------------------------------------------------------------------------------------------------------------------------------------------
http://www.cnblogs.com/marskai/articles/9299362.html
这个里面写的结果挺好的。
小技巧:reverse函数
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <cmath>
#include <list>
#include <deque>
#define max 100005
using namespace std;
struct node{
int frontad;
int data;
int backad;
};
struct Data
{
int data;
int next;
};
int main()
{ int firstad;
int k;
int n,s,cur;
node temp;
Data D[max];
int count1=0;
vector<node> in;
vector<node> ou;
scanf("%d %d %d",&firstad,&n,&k);
for(int i=0;i<n;i++)
{
cin>>temp.frontad>>temp.data>>temp.backad;
in.push_back(temp);
if(temp.frontad==-1)
{
continue;
}
D[temp.frontad].data=temp.data;
D[temp.frontad].next=temp.backad;
}
cur=firstad;
while(1)
{
node semp;
semp.frontad=cur;
semp.data=D[cur].data;
semp.backad=D[cur].next;
ou.push_back(semp);
if(D[cur].next==-1)
break;
cur=D[cur].next;
}
for(s=0;s<ou.size()/k;s++)
{
reverse(ou.begin()+s*k,ou.begin()+(s+1)*k);
}
for(int i=0;i<ou.size();i++){
if(i==ou.size()-1){
printf("%05d %d -1\n",ou[i].frontad,ou[i].data);
}
else{
printf("%05d %d %05d\n",ou[i].frontad,ou[i].data,ou[i+1].frontad );
}
}
return 0;
}