洛谷题目 P1215
本帖最后由 zltzlt 于 2020-8-20 15:06 编辑洛谷题目 P1215
原题
我的代码
#include <bits/stdc++.h>
using namespace std;
int a, b, c, visited;
set<int> res;
set<int>::iterator it;
void dfs(int cura, int curb, int curc)
{
// 如果当前状态重复了就直接返回
if (visited)
return;
// 如果当前 a 桶为空就将 c 桶的状态保存
if (!cura)
res.insert(curc);
visited = 1;
if (cura)
{
// A 桶往 B 桶倒
dfs(((b - curb) >= cura) ? 0 : cura - (b - curb),
((b - curb) < cura) ? b : (curb + cura), curc);
// A 桶往 C 桶倒
dfs(((c - curc) >= cura) ? 0 : cura - (c - curc),
curb, ((c - curc) < cura) ? c : (curc + cura));
}
if (curb)
{
// B 桶往 A 桶倒
dfs(((a - cura) < curb) ? a : (curb + cura),
((a - cura) >= curb) ? 0 : curb - (a - cura), curc);
// B 桶往 C 桶倒
dfs(cura, ((c - curc) >= curb) ? 0 : curb - (c - curc),
((c - curc) < curb) ? c : (curb + curc));
}
if (curc)
{
// C 桶往 A 桶倒
dfs(((a - cura) < curc) ? a : (curc + cura), curb,
((a - cura) >= curc) ? 0 : curc - (a - cura));
// C 桶往 B 桶倒
dfs(cura, ((b - curb) < curc) ? b : (curc + curb),
((b - curb) >= curc) ? 0 : curc - (b - curb));
}
}
int main()
{
cin >> a >> b >> c;
dfs(0, 0, c);
for (it = res.begin(); it != res.end(); it++)
cout << *it << ' ';
return 0;
}
页:
[1]