紫书上的题目,代码漂亮
#include<iostream>
#include<cstdio>
#include<set>
#include<string>
#include<string.h>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<cctype>
#include<algorithm>
#include<sstream>
#include<utility>
#include<cmath>
#define mt(a) memset(a,0,sizeof (a))
#define fl(a,b,c) fill(a,b,c)
#define SWAP(a,b,t) (t=a,a=b,b=t)
#define inf 1000000
using namespace std;
typedef long long ll;
int n;
vector<int>d[50];
void find(int a, int &pos, int &hei)
{
for (pos = 0; pos < n; pos++)
{
for (hei = 0; hei < d[pos].size(); hei++)
{
if (d[pos][hei] == a)return;
}
}
}
void clear(int pos,int hei)
{
for (int i=hei+1; i < d[pos].size(); i++)
{
d[d[pos][i]].push_back(d[pos][i]);
}
d[pos].resize(hei+1);
}
void pile(int pos, int hei, int pos2)
{
for (int i=hei; i < d[pos].size(); i++)
d[pos2].push_back(d[pos][i]);
d[pos].resize(hei);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
d[i].push_back(i);
string c1, c2;
int x, y;
while (cin>>c1>>x>>c2>>y)
{
int p1, h1, p2, h2;
find(x, p1, h1);
find(y, p2, h2);
if (p1 == p2)continue;
if (c1 == "move")
clear(p1, h1);
if (c2 == "onto")
clear(p2, h2);
pile(p1, h1, p2);
}
for (int i = 0; i < n; i++)
{
printf("%d:", i);
for (int j = 0; j < d[i].size(); j++)
printf(" %d", d[i][j]);
printf("\n");
}
return 0;
}