Pagini recente » Cod sursa (job #2748595) | Cod sursa (job #283416) | Cod sursa (job #2891527) | Cod sursa (job #489537) | Cod sursa (job #163510)
Cod sursa(job #163510)
#include<cstdio>
#include<vector>
int n,nr[5001],m,i,j,k,x,y,z;
std::vector<short> a[5001];
int _m(int a,int b){if(a<b) return b;return a;}
int getmax(){return _m(x,_m(y,z));}
int getmed(){
if(x<y)
if(y<z) return y;
else
if(x<z) return z;
else return x;
else
if(x<z) return x;
else
if(y<z) return z;
else return y;
}
int getdouble()
{
if(x==y) return x;
if(y==z) return y;
return x;
}
int main()
{
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
scanf("%d",&n);
a[1].push_back(1);
nr[1]=1;
for(i=2;i<=n;i++){
scanf("%d %d %d",&x,&y,&z);
m=1;k=0;
if(x==y && y==z){
//un numar
for(j=2;j<i;j++)
if(nr[j]>nr[m]) m=j;
x--;}
else
if(x==y || y==z || z==x){
//doua numere
x=getdouble()-1;
for(j=2;j<i;j++)
if(nr[j]>nr[m]) m=j;}
else{
//trei numere
k=getmed();
y=getmax()-2;
x=k-1;
for(j=2;j<i-1;j++)
if(nr[j]>nr[m]) m=j;}
nr[i]=nr[m]+1;
if(k==0){
for(j=0;j<x && j<m;j++)
a[i].push_back(a[m][j]);
k=m+2;
if(j!=x)
for(;j<x;j++,k++)
a[i].push_back(k);
a[i].push_back(m+1);
for(;j<m;j++)
a[i].push_back(a[m][j]);
for(;k<=n;k++)
a[i].push_back(k);}
else{
for(j=0;j<x && j<m;j++)
a[i].push_back(a[m][j]);
k=m+2;
if(j!=x)
for(;j<x;j++,k++)
a[i].push_back(k);
a[i].push_back(m+1);
for(;j<m&&j<y;j++)
a[i].push_back(a[m][j]);
if(j!=y)
for(;j<y;j++,k++)
a[i].push_back(k);
a[i].push_back(k++);
for(;j<m;j++)
a[i].push_back(a[m][j]);
for(;k<=n;k++)
a[i].push_back(k);}}
printf("%d\n",nr[n]);
for(i=0;i<n;i++)
printf("%d ",a[n][i]);
fclose(stdout);
return 0;
}