Nu aveti permisiuni pentru a descarca fisierul grader_test19.ok
Cod sursa(job #210864)
Utilizator | Data | 29 septembrie 2008 19:30:57 | |
---|---|---|---|
Problema | Sortare | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.98 kb |
#include <cstdio>
const int NMAX=5001;
int N,h,A[NMAX],B[NMAX],C[NMAX],x[NMAX];
void read(){
scanf("%d",&N);
for (int i=2;i<=N;++i) scanf("%d %d %d",&A[i],&B[i],&C[i]);
}
void write(){
printf("%d\n",h);
for (int i=1;i<=N;++i) printf("%d ",x[i]);
}
void solve(int n){
int i;
++h;
if (n==1) {x[1]=1;return;}
if (A[n]!=B[n] && B[n]!=C[n] && C[n]!=A[n]){
solve(n-2);
int a,b;
if (B[n]<C[n]) a=B[n],b=C[n];
else a=C[n],b=B[n];//a<b
for (i=n-1;i>a;i--) x[i]=x[i-1];
for (i=n;i>b;i--) x[i]=x[i-1];
x[B[n]]=n-1;
x[C[n]]=n;
}
else{
int med;
if (A[n]==B[n] || A[n]==C[n]) med=A[n];
else med=B[n];
solve(n-1);
for (i=n;i>med;i--) x[i]=x[i-1];
x[med]=n;}
}
int main(){
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
read();
solve(N);
write();
return 0;
}