记录编号 604825 评测结果 AAAAAAAAAA
题目名称 3659.[SYOI 2022]倒水 最终得分 100
用户昵称 GravatarHollow07 是否通过 通过
代码语言 C++ 运行时间 0.029 s
提交时间 2025-08-12 08:23:17 内存使用 3.89 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

struct node{
	int a,b,c,step;
};

int A,B,C,x;
bool vis[101][101][101];
queue<node> q;

bool check(int aa,int bb,int cc){
	return (aa==x)||(bb==x)||(cc==x);
}

int main(){
//	freopen("in.in","r",stdin);
	freopen("pourwater.in","r",stdin);
	freopen("pourwater.out","w",stdout);
	scanf("%d %d %d %d",&A,&B,&C,&x);
    if(x>A){
        printf("false\n");
        return 0;
    }
    q.push({A,0,0,0});
    vis[A][0][0]=1;
    while(!q.empty()){
        node u=q.front();q.pop();
        int a=u.a,b=u.b,c=u.c,step=u.step;
        if(check(a,b,c)){
        	printf("%d\n",step);
			return 0;
        }
        if(a>0&&b<B){
            int v=min(a,B-b);
            int na=a-v,nb=b+v,nc=c;
            if(!vis[na][nb][nc]){
                vis[na][nb][nc]=1;
                q.push({na,nb,nc,step+1});
            }
        }
        if(a>0&&c<C){
            int v=min(a,C-c);
            int na=a-v,nb=b,nc=c+v;
            if(!vis[na][nb][nc]){
                vis[na][nb][nc]=1;
                q.push({na,nb,nc,step+1});
            }
        }
        if(b>0&&a<A){
            int v=min(b,A-a);
            int na=a+v,nb=b-v,nc=c;
            if(!vis[na][nb][nc]){
                vis[na][nb][nc]=1;
                q.push({na,nb,nc,step+1});
            }
        }
        if(b>0&&c<C){
            int v=min(b,C-c);
            int na=a,nb=b-v,nc=c+v;
            if(!vis[na][nb][nc]){
                vis[na][nb][nc]=1;
                q.push({na,nb,nc,step+1});
            }
        }
        if(c>0&&a<A){
            int v=min(c,A-a);
            int na=a+v,nb=b,nc=c-v;
            if(!vis[na][nb][nc]){
                vis[na][nb][nc]=1;
                q.push({na,nb,nc,step+1});
            }
        }
        if(c>0&&b<B){
            int v=min(c,B-b);
            int na=a,nb=b+v,nc=c-v;
            if(!vis[na][nb][nc]) {
                vis[na][nb][nc]=1;
                q.push({na,nb,nc,step+1});
            }
        }
    }
    cout << "false\n";
    return 0;
}