记录编号 604774 评测结果 AAAAAAAAAA
题目名称 3659.[SYOI 2022]倒水 最终得分 100
用户昵称 Gravatar左清源 是否通过 通过
代码语言 C++ 运行时间 0.031 s
提交时间 2025-08-11 19:25:40 内存使用 4.11 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int ans,a,b,c,x,A,B,C,cnt;
int f[101][101][101];
bool mk[101][101][101];
struct node{int a,b,c;};
queue<node>q;
int main(){
	freopen("pourwater.in","r",stdin);
	freopen("pourwater.out","w",stdout);
	cin>>A>>B>>C>>x;
	f[A][0][0]=0;mk[A][0][0]=1;
	q.push(node{A,0,0});
	ans=0x3f3f3f3f;
	while(q.size()){
		node t=q.front();q.pop();
		a=t.a,b=t.b,c=t.c;
		// a -> b  
		cnt=min(a,B-b);
		if(!mk[a-cnt][b+cnt][c]){
			f[a-cnt][b+cnt][c]=f[a][b][c]+1;
			mk[a-cnt][b+cnt][c]=1;
			q.push(node{a-cnt,b+cnt,c});
		}
		// a -> c
		cnt=min(a,C-c);
		if(!mk[a-cnt][b][c+cnt]){
			f[a-cnt][b][c+cnt]=f[a][b][c]+1;
			mk[a-cnt][b][c+cnt]=1;
			q.push(node{a-cnt,b,c+cnt});
		}
		// b -> a
		cnt=min(b,A-a);
		if(!mk[a+cnt][b-cnt][c]){
		 	f[a+cnt][b-cnt][c]=f[a][b][c]+1;
		 	mk[a+cnt][b-cnt][c]=1;
		 	q.push(node{a+cnt,b-cnt,c});
		}
		// b -> c
		cnt=min(b,C-c);
		if(!mk[a][b-cnt][c+cnt]){
		 	f[a][b-cnt][c+cnt]=f[a][b][c]+1;
		 	mk[a][b-cnt][c+cnt]=1;
		 	q.push(node{a,b-cnt,c+cnt});
		}
		// c -> a
		cnt=min(c,A-a);
		if(!mk[a+cnt][b][c-cnt]){
		 	f[a+cnt][b][c-cnt]=f[a][b][c]+1;
		 	mk[a+cnt][b][c-cnt]=1;
		 	q.push(node{a+cnt,b,c-cnt});
		}
		// c -> b
		cnt=min(c,B-b);
		if(!mk[a][b+cnt][c-cnt]){
		 	f[a][b+cnt][c-cnt]=f[a][b][c]+1;
		 	mk[a][b+cnt][c-cnt]=1;
		 	q.push(node{a,b+cnt,c-cnt});
		} 
		if(a==x||b==x||c==x)ans=min(ans,f[a][b][c]);
	}
	if(ans>=0x3f3f3f3f)printf("false\n");
	else printf("%d\n",ans);
	return 0;
}