#include <vector>
#include <map>
#include <sstream>
#include <string>
#include<iostream>
#include<cstdio>
#include <algorithm>
#include<iomanip>
#include<algorithm>
#include<cmath>
using namespace std;
void find_block(int a, vector<vector<int>>&pile,int& p, int& h)
{
for (p = 0; p < pile.size(); ++p)
{
for (h = 0; h < pile[p].size(); ++h)
{
if (pile[p][h] == a)
return;
}
}
}
void clear_above(int p, int h, vector<vector<int>>& pile)
{
for (int i = h + 1; i < pile[p].size(); ++i)
{
pile[pile[p][i]].push_back(pile[p][i]);
}
pile[p].resize(h + 1);
}
void pile_onto(int p, int h,int pb, vector<vector<int>>& pile)
{
for (int i = h; i < pile[p].size(); ++i)
{
pile[pb].push_back(pile[p][i]);
}
pile[p].resize(h);
}
int main()
{
int n;
int a, b, pa, pb, ha, hb;
string s1, s2;
cin >> n;
vector<vector<int>>pile(n);
for (int i = 0; i < n; ++i)
{
pile[i].push_back(i);
}
while (cin >> s1 && s1 != "quit")
{
cin >> a >> s2 >> b;
find_block(a, pile, pa, ha);
find_block(b, pile, pb, hb);
if (pa == pb)
continue;
if (s1 == "move")
{
clear_above(pa, ha, pile);
}
if (s2 == "onto")
{
clear_above(pb, hb, pile);
}
pile_onto(pa, ha, pb, pile);
}
for (int i = 0; i < pile.size(); ++i)
{
cout << i << ":";
for (int j = 0; j < pile[i].size(); ++j)
{
cout << " " << pile[i][j];
}
cout << endl;
}
}
紫书UVa101
最新推荐文章于 2021-02-02 21:34:29 发布