#include <iostream> using namespace std; int A, B, C; struct { int i; int j; int method; }visit[1001][1001]; struct { int a; int b; int deep; }queue[100001]; int result; int ra, rb; void Show(int a, int b) { int method = visit[a][b].method; int pa = visit[a][b].i; int pb = visit[a][b].j; if (pa == -2) { return; } Show(pa, pb); switch(method) { case 1: printf("fill A/n"); break; case 2: printf("fill B/n"); break; case 3: printf("pour A B/n"); break; case 4: printf("pour B A/n"); break; case 5: printf("empty A/n"); break; case 6: printf("empty B/n"); break; } } void BFS() { int head, tail, deep; head = tail = 0; queue[tail].a = 0; queue[tail].b = 0; queue[tail].deep = 0; visit[0][0].i = -2; visit[0][0].j = 0; tail++; while(head < tail) { int curA, curB; curA = queue[head].a; curB = queue[head].b; deep = queue[head++].deep; if (curA == C || curB == C) { result = deep; ra = curA; rb = curB; return; } int a, b; //1 int t1, t2; a = A; b = curB; if (visit[a][b].i == -1) { queue[tail].a = a; queue[tail].b = b; queue[tail++].deep = deep+1; visit[a][b].i = curA; visit[a][b].j = curB; visit[a][b].method = 1; } a = curA; b = B; if (visit[a][b].i == -1) { queue[tail].a = a; queue[tail].b = b; queue[tail++].deep = deep+1; visit[a][b].i = curA; visit[a][b].j = curB; visit[a][b].method = 2; } a = (B-curB) - curA > 0 ? 0 : curA - (B-curB); b = curB + curA - a; if (visit[a][b].i == -1) { queue[tail].a = a; queue[tail].b = b; queue[tail++].deep = deep+1; visit[a][b].i = curA; visit[a][b].j = curB; visit[a][b].method = 3; } b = (A-curA) - curB > 0 ? 0 : curB - (A-curA); a = curA + curB - b; if (visit[a][b].i == -1) { queue[tail].a = a; queue[tail].b = b; queue[tail++].deep = deep+1; visit[a][b].i = curA; visit[a][b].j = curB; visit[a][b].method = 4; } a = 0; b = curB; if (visit[a][b].i == -1) { queue[tail].a = a; queue[tail].b = b; queue[tail++].deep = deep+1; visit[a][b].i = curA; visit[a][b].j = curB; visit[a][b].method = 5; } a = curA; b = 0; if (visit[a][b].i == -1) { queue[tail].a = a; queue[tail].b = b; queue[tail++].deep = deep+1; visit[a][b].i = curA; visit[a][b].j = curB; visit[a][b].method = 6; } } result = -1; } int main() { freopen("test.txt", "r", stdin); while (scanf("%d %d %d", &A, &B, &C) != EOF) { for (int i = 0; i < 1001; i++) { for (int j = 0; j < 1001; j++) { visit[i][j].i = visit[i][j].j = -1; } } BFS(); Show(ra, rb); printf("success/n"); } return 0; }