2013年10月9日 星期三

UVA-101

UVA-101  block problems
這題我無腦亂寫的
純粹貼上來好玩而已
千萬不要學這種爛coding風格..


#include<iostream>
#include<string>
using namespace std;
int main(){
    int blockval[26];
    int stacks[26][26];
    int pile[26],high[26];
    
    int n,a,b,ta,tb,temp,tc,td;
    string temp1,temp2;
    cin>>n;
    for(int i=0;i<n;i++){
        blockval[i]=1;    
        stacks[i][0]=i;
        pile[i]=i;
        high[i]=0;
    }
    while(1){
        cin>>temp1;
        if(temp1=="quit"){
            
            for(int i=0;i<n;i++){
                cout<<i<<":";
                for(int j=0;j<blockval[i];j++){
                    cout<<" "<<stacks[i][j];
                }
            cout<<endl;
            }
        break;
        }
            
        cin>>a>>temp2>>b;
        temp1=temp1+temp2;
        if(a==b || pile[a]==pile[b])
            continue;
        ta=a;tb=b;
        if(temp1=="moveonto"){
            ta=pile[a];tb=high[a];
            tc=pile[b];td=high[b];
            temp=blockval[pile[a]];
            if(pile[a]==pile[b] &&high[a]<high[b]){
                continue;
            }
            for(int i=high[a]+1;i<blockval[pile[a]];i++){
                blockval[stacks[ta][i]]=1;
                pile[stacks[ta][i]]=stacks[ta][i];
                high[stacks[ta][i]]=0;
            }
            for(int i=high[b]+1;i<blockval[pile[b]];i++){
                blockval[stacks[tc][i]]=1;
                pile[stacks[tc][i]]=stacks[tc][i];
                high[stacks[tc][i]]=0;
            }
            pile[a]=pile[b];
            high[a]=high[b]+1;
            stacks[pile[b]][high[a]]=a;
            blockval[ta]=tb;
            blockval[pile[b]]=td+2;
            
        }
        if(temp1=="moveover"){
            ta=pile[a];tb=high[a];
            temp=blockval[pile[a]];
            for(int i=high[a]+1;i<blockval[pile[a]];i++){
                blockval[stacks[pile[a]][i]]=1;
                pile[stacks[pile[a]][i]]=stacks[pile[a]][i];
                high[stacks[pile[a]][i]]=0;
            }
            stacks[pile[b]][blockval[pile[b]]]=a;
            blockval[ta]=tb;
            pile[a]=pile[b];
            high[a]=blockval[pile[b]];
            blockval[pile[b]]+=1;
            //cout<<'\n'<<"pilehigh of "<<pile[a]<<"="<<blockval[pile[a]]<<'\n';
        }
        if(temp1=="pileonto"){
            ta=pile[a];tb=high[a];
            tc=pile[b];td=high[b];
            temp=blockval[pile[a]];
            for(int i=high[b]+1;i<blockval[pile[b]];i++){
                blockval[stacks[tc][i]]=1;
                pile[stacks[tc][i]]=stacks[tc][i];
                high[stacks[tc][i]]=0;
            }
            for(int i=high[a];i<temp;i++){
                high[stacks[ta][i]]=i-tb+high[b]+1;
                stacks[pile[b]][high[stacks[ta][i]]]=stacks[ta][i];
                pile[stacks[ta][i]]=pile[b];
            }
            blockval[ta]=tb;
            blockval[tc]=high[b]+temp-tb+1;
        }
        if(temp1=="pileover"){
            ta=pile[a];tb=high[a];
            temp=blockval[pile[a]];
            if(pile[a]==pile[b] &&high[a]<high[b]){
                continue;
            }
            //cout<<'\n'<<"blockval[pile[a]]="<<blockval[pile[a]]<<", high[a]="<<high[a]<<'\n';
            for(int i=high[a];i<temp;i++){
                high[stacks[ta][i]]=i-tb+blockval[pile[b]];
                //cout<<"high[stacks[ta][i]]="<<high[stacks[ta][i]]<<endl;
                stacks[pile[b]][high[stacks[ta][i]]]=stacks[ta][i];
                pile[stacks[ta][i]]=pile[b];
            }
            blockval[pile[b]]+=temp-tb;
            blockval[ta]=tb;
            //cout<<'\n'<<"pilehigh of "<<pile[b]<<"="<<blockval[pile[b]]<<'\n';
        }
    }

    cin>>temp1;
return 0;    
}



真的亂寫030

沒有留言:

張貼留言

TEST