Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <vector>
- #include <string.h>
- using namespace std;
- int n;
- int a,b;
- char prim[128];
- char sec[128];
- vector<int> blocks[30];
- pair<int,int> findBlock(int x) {
- for (int i=0; i<n; i++)
- for (int j=0; j<blocks[i].size(); j++)
- if (blocks[i][j]==x)
- return make_pair(i,j);
- }
- int returnToOrig(int x) {
- pair<int, int> px = findBlock(x);
- while (blocks[px.first].back()!=x) {
- int tmp = blocks[px.first].back();
- blocks[px.first].pop_back();
- blocks[tmp].push_back(tmp);
- }
- return px.first;
- }
- vector<int> getPile(int x) {
- pair<int, int> px = findBlock(x);
- vector<int> pile(blocks[px.first].begin()+px.second,
- blocks[px.first].end());
- while (blocks[px.first].back()!=x) blocks[px.first].pop_back();
- blocks[px.first].pop_back();
- return pile;
- }
- void printBlocks() {
- for (int i=0; i<n; i++) {
- printf("%d:", i);
- for (int j=0; j<blocks[i].size(); j++)
- printf(" %d", blocks[i][j]);
- printf("\n");
- }
- }
- int main() {
- scanf("%d", &n);
- for (int i=0; i<n; i++)
- blocks[i].push_back(i);
- while (1) {
- scanf(" %s", prim);
- if (!strcmp(prim,"quit")) break;
- scanf("%d %s %d", &a,sec,&b);
- if (a==b) continue;
- if (findBlock(a).first==findBlock(b).first)
- continue;
- vector<int> toB;
- if (!strcmp(prim, "move")) {
- int pa = returnToOrig(a);
- toB.push_back(a);
- blocks[pa].pop_back();
- }
- else toB = getPile(a);
- if (!strcmp(sec, "onto"))
- returnToOrig(b);
- int it = findBlock(b).first;
- for (int i=0; i<toB.size(); i++)
- blocks[it].push_back(toB[i]);
- }
- printBlocks();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement