记录编号 604772 评测结果 AAAAAAAAAA
题目名称 3659.[SYOI 2022]倒水 最终得分 100
用户昵称 Gravatarpcx 是否通过 通过
代码语言 C++ 运行时间 0.031 s
提交时间 2025-08-11 19:21:19 内存使用 3.76 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
struct Node{
    int a,b,c,s;
    Node(int _a,int _b,int _c,int _s):a(_a),b(_b),c(_c),s(_s){};
};
queue<Node> q;
int a,b,c,x;
bool vis[111][111][111];
void f(int a,int b,int c,int s){
    if(!vis[a][b][c]){
        vis[a][b][c]++;
        q.push(Node(a,b,c,s));
    }
}
bool bfs(int a,int b,int c,int x){
    q.push(Node(a,0,0,0));
    vis[a][0][0]=1;
    while(!q.empty()){
        Node s=q.front();
        q.pop();
        if(s.a==x||s.b==x||s.c==x){
            cout<<s.s<<endl;
            return 1;
        }
        int p=min(s.a,b-s.b);
        if(p>0) f(s.a-p,s.b+p,s.c,s.s+1);
        p=min(s.b,c-s.c);
        if(p>0) f(s.a,s.b-p,s.c+p,s.s+1);
        p=min(s.a,c-s.c);
        if(p>0) f(s.a-p,s.b,s.c+p,s.s+1);
        p=min(s.c,b-s.b);
        if(p>0) f(s.a,s.b+p,s.c-p,s.s+1);
        p=min(s.c,a-s.a);
        if(p>0) f(s.a+p,s.b,s.c-p,s.s+1);
        p=min(s.b,a-s.a);
        if(p>0) f(s.a+p,s.b-p,s.c,s.s+1);
    }
    return 0;
}
int main(){
    freopen("pourwater.in","r",stdin);
    freopen("pourwater.out","w",stdout);
    cin>>a>>b>>c>>x;
    if(!bfs(a,b,c,x)){
        cout<<"false";
    }
    return 0;
}