我们先思考如何找到a,b位置,然后
通过分析,可以知道出现move,a上的物块就要归位
出现onto,b上的物块就要归位。
然后我们就考虑如何将a放到b上。
#include"iostream"
#include"algorithm"
#include"string"
#include"vector"
#include"cstdio"
using namespace std;
int m;
vector<int>v[30];
void he(int a,int& i,int& j)
{
for( i=0;i<m;i++)
for( j=0;j<v[i].size();j++)
if(a==v[i][j]) return;
}
void mo(int a,int b)
{
for(int i=b+1;i<v[a].size();i++)
{
int j=v[a][i];
v[j].push_back(j);
}
v[a].resize(b+1);
}
void to(int a,int b,int c)
{
for(int i=a;i<v[b].size();i++)
v[c].push_back(v[b][i]);
v[b].resize(a);
}
int main()
{
int n,i,a,b,c,d,g,j;
string s,s1;
cin>>m;
for(i=0;i<m;i++)
v[i].push_back(i);
while(cin>>s)
{
if(s[0]=='q') break;
cin>>a>>s1>>b;
he(a,c,d);
he(b,g,n);
if(c==g) continue;
if(s[0]=='m') mo(c,d);
if(s1[1]=='n') mo(g,n);
to(d,c,g);
}
for(i=0;i<m;i++)
{
printf("%d:",i);
for(j=0;j<v[i].size();j++)
printf(" %d",v[i][j]);
printf("\n");
}
return 0;
}