// UVa 101 - The Blocks Problem
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int n, pos[25];
vector<int> pile[25];
void reboot(int a) {
int i, from = pos[a];
for (i = 0; i < pile[from].size(); i++)
if (pile[from][i] == a)
break;
int newSize = i + 1;
for (i = i + 1; i < pile[from].size(); i++) {
int target = pile[from][i];
pos[target] = target;
pile[target].push_back(target);
}
pile[from].resize(newSize);
}
void put(int a, int b) {
int i, from = pos[a], to = pos[b];
for (i = 0; i < pile[from].size(); i++)
if (pile[from][i] == a)
break;
int newSize = i;
for (; i < pile[from].size(); i++) {
pos[pile[from][i]] = to;
pile[to].push_back(pile[from][i]);
}
pile[from].resize(newSize);
}
void printAll() {
for (int i = 0; i < n; i++) {
cout << i << ":";
for (int j = 0; j < pile[i].size(); j++)
cout << " " << pile[i][j];
cout << endl;
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
pos[i] = i;
pile[i].push_back(i);
}
while (true) {
string move, prep;
cin >> move;
if (move == "quit")
break;
int a, b;
cin >> a >> prep >> b;
if (pos[a] == pos[b])
continue;
if (move == "move" && prep == "onto") {
reboot(a);
reboot(b);
} else if (move == "move" && prep == "over") {
reboot(a);
} else if (move == "pile" && prep == "onto") {
reboot(b);
}
put(a, b);
}
printAll();
return 0;
}
Saturday, April 18, 2015
UVa 101 - The Blocks Problem
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment