水题练练手速 :-)
注意输出格式,换行前不能有空格,不然会PE
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<vector>
using namespace std;
const int maxn = 30;
int n;
vector<int> pile[maxn];
void find_position(int a, int &p, int &h)
{
for (p = 0; p < n; p++)
{
for (h = 0; h < pile[p].size(); h++)
{
if (pile[p][h] == a)
return;
}
}
}
void pile_back(int a,int p1,int h1)
{
for (int h = h1 + 1; h < pile[p1].size(); h++)
{
pile[pile[p1][h]].push_back(pile[p1][h]);
}
pile[p1].resize(h1+1);
}
void pile_onto(int pa1, int pa2, int ha1, int ha2)
{
for (int h = ha1; h < pile[pa1].size(); h++)
{
pile[pa2].push_back(pile[pa1][h]);
}
pile[pa1].resize(ha1);
}
int main()
{
cin >> n;
string s1, s2;
int a1, a2;
for (int i = 0; i < n; i++)
pile[i].push_back(i);
while (cin >> s1 && s1!="quit")
{
cin >> a1 >> s2 >> a2;
int pa1, pa2, ha1, ha2;
find_position(a1, pa1, ha1);
find_position(a2, pa2, ha2);
if (pa1 == pa2)
continue;
if (s1 == "move" && s2 == "onto")
{
pile_back(a1, pa1, ha1);
pile_back(a2, pa2, ha2);
pile_onto(pa1, pa2, ha1, ha2);
}
if (s1 == "move" && s2 == "over")
{
pile_back(a1, pa1, ha1);
pile_onto(pa1, pa2, ha1, ha2);
}
if (s1 == "pile" && s2 == "onto")
{
pile_back(a2, pa2, ha2);
pile_onto(pa1, pa2, ha1, ha2);
}
if (s1 == "pile" && s2 == "over")
{
pile_onto(pa1, pa2, ha1, ha2);
}
}
for (int i = 0; i < n; i++)
{
cout << i << ":";
for (int j = 0; j < pile[i].size(); j++)
{
cout << " "<< pile[i][j];
}
cout << endl;
}
}