zltzlt 发表于 2020-8-20 15:04:39

洛谷题目 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;
}

阿法国 发表于 2020-8-22 15:40:17

页: [1]
查看完整版本: 洛谷题目 P1215