//新生训练

- #include
- #include
- #include
- #include
- using namespace std;
- typedef pair<int, int> PII;
- const int N = 205;
- int n, m;
- int l;
- int A, B, C;
- int dis[N][N];
-
- struct node
- {
- int px, py, op;
- };
-
- node pre[N][N];
-
- void dfs(int x, int y)
- {
- if (x == 0 && y == 0)
- {
- return;
- }
- dfs(pre[x][y].px, pre[x][y].py);
- switch (pre[x][y].op)
- {
- case 1:
- cout << "FILL(1)\n";
- break;
- case 2:
- cout << "FILL(2)\n";
- break;
- case 3:
- cout << "DROP(1)\n";
- break;
- case 4:
- cout << "DROP(2)\n";
- break;
- case 5:
- cout << "POUR(1,2)\n";
- break;
- case 6:
- cout << "POUR(2,1)\n";
- }
- }
-
- bool flag = 1;
-
- void bfs()
- {
- queue
q; - q.push(make_pair(0, 0));
- dis[0][0] = 0;
- while (!q.empty())
- {
- PII t = q.front();
- q.pop();
-
- int x = t.first, y = t.second;
- if (x == C || y == C)
- {
- cout << dis[x][y] << '\n';
- dfs(x, y);
- flag = 0;
- return;
- }
- int ix, iy;
-
- // FILL(1)
- ix = A, iy = y;
- if (dis[ix][iy] == -1)
- {
- dis[ix][iy] = dis[x][y] + 1;
- pre[ix][iy] = {x, y, 1};
- q.push(make_pair(ix, iy));
- }
-
- // FILL(2)
- ix = x, iy = B;
- if (dis[ix][iy] == -1)
- {
- dis[ix][iy] = dis[x][y] + 1;
- pre[ix][iy] = {x, y, 2};
- q.push(make_pair(ix, iy));
- }
-
- // DROP(1)
- ix = 0, iy = y;
- if (dis[ix][iy] == -1)
- {
- dis[ix][iy] = dis[x][y] + 1;
- pre[ix][iy] = {x, y, 3};
- q.push(make_pair(ix, iy));
- }
-
- // DROP(2)
- ix = x, iy = 0;
- if (dis[ix][iy] == -1)
- {
- dis[ix][iy] = dis[x][y] + 1;
- pre[ix][iy] = {x, y, 4};
- q.push(make_pair(ix, iy));
- }
-
- // POUR(1,2)
- ix = x, iy = y;
- while (ix && iy < B)
- {
- --ix;
- ++iy;
- }
- if (dis[ix][iy] == -1)
- {
- dis[ix][iy] = dis[x][y] + 1;
- pre[ix][iy] = {x, y, 5};
- q.push(make_pair(ix, iy));
- }
-
- // POUR(2,1)
- ix = x, iy = y;
- while (iy && ix < A)
- {
- ++ix;
- --iy;
- }
- if (dis[ix][iy] == -1)
- {
- dis[ix][iy] = dis[x][y] + 1;
- pre[ix][iy] = {x, y, 6};
- q.push(make_pair(ix, iy));
- }
- }
- }
-
- void solve()
- {
- memset(dis, -1, sizeof dis);
- cin >> A >> B >> C;
- bfs();
- if (flag)
- cout << "impossible";
- }
-
- signed main()
- {
- int t = 1;
- // cin>>t;
- while (t--)
- {
- solve();
- }
- return 0;
- }
//感谢学长的讲解 hwh ;
~~~//仅当笔者个人备忘录使用。