這題我無腦亂寫的
純粹貼上來好玩而已
千萬不要學這種爛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