রবিবার, ৮ এপ্রিল, ২০১২

UVA-103 Stacking Boxes


#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

int totalbox,DIM;
int len[32],order[32],pred[32];
class box{
int dim[12];
public:
void input();             //taking input
void dimsort();        //dimension sorting
int operator<<(box BOX1);  //lexico sorting;
int operator>(box BOX1);    //lis compare
box operator^(box &BOX1);  //swap box's
};

void box::input()
{
    int i;
    for(i=1;i<=DIM;i++)cin>>dim[i];

    return;
}

void box::dimsort()
{ sort(dim+1,dim+1+DIM);
  return;
}

int box::operator<<(box BOX1)
{ int i;
  for(i=1;i<=DIM;i++){if(dim[i]<BOX1.dim[i])return 1;
                                    if(dim[i]>BOX1.dim[i])return 0;
                                  }
  return 0;
}

int box::operator>(box BOX1)
{ int i;
  for(i=1;i<=DIM;i++)if(dim[i]<=BOX1.dim[i])return 0;
  return 1;
 }

box box::operator^(box &BOX1)
{
    int i;
    for(i=1;i<=DIM;i++)swap(dim[i],BOX1.dim[i]);
    return *this;
}
void setvalue()
{
   int i;
   for(i=1;i<=totalbox;i++){order[i]=i;len[i]=1;
                         
                           }

   return;
}

 int main()
 {   int signal=0;
     while(cin>>totalbox>>DIM)
    {   if(signal)cout<<endl;
        box BOX[32];
        int i,j;
        setvalue();
        for(i=1;i<=totalbox;i++){BOX[i].input();
                                              BOX[i].dimsort();
                                             }

        for(i=1;i<totalbox;i++)
                    for(j=i+1;j<=totalbox;j++)
                                             if(BOX[j]<<BOX[i]){ BOX[j]^BOX[i];
                                                                                swap(order[j],order[i]);
                                                                               }
                             
                               
       
         for(i=1;i<totalbox;i++)
           for(j=i+1;j<=totalbox;j++){ if(BOX[j]>BOX[i] && len[i]+1>len[j]){len[j]=len[i]+1;
                                                                                                                    pred[j]=i;
                                                                                                                   }
                                                     }

            int max=0,maxel;;
            for(i=1;i<=totalbox;i++)if(max<len[i]){max=len[i];maxel=i;}
          int rev[32];
            rev[max]=order[maxel];
            for(i=max-1;i>0;i--){ rev[i]=order[pred[maxel]];
                                            maxel=pred[maxel];
                                            }
         
            cout<<max<<endl;
            cout<<rev[1];
            for(i=2;i<=max;i++)cout<<" "<<rev[i];
            cout<<endl;
            signal=1;

    }
    return 0;
    }

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন